Xcode构建失败“架构x86_64的未定义符号” [英] Xcode build failure "Undefined symbols for architecture x86_64"

查看:840
本文介绍了Xcode构建失败“架构x86_64的未定义符号”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Xcode初学者的问题:



这是我第一次使用Xcode 4.6.3。



我试图写一个非常简单的控制台程序,搜索配对的BT设备,并将其打印到NSLog。



它与以下错误构建:

 架构x86_64的未定义符号:
_OBJC_CLASS _ $ _ IOBluetoothDevice,引用自:
objc-class-ref in main。 o
ld:没有为架构x86_64找到符号
clang:error:linker命令失败,退出代码1(使用-v查看调用)

我搜索得很疯狂。常见的问题应该是引用一个文件,其中只导入头文件,并且链接器找不到实现(* .m-file)。



我在上述语句中缺少什么?



我也试过建立一个32位机器(构建失败了)。它显然是一个链接器错误,但我不知道,它的相关,除了有一个问题,找到IOBluetoothDevice的实现,在x86和x64架构,而头文件是从标准包括框架,称为IOBluetooth?



您的信息我的主代码main.m是:

  #import< Foundation / Foundation.h> 
#import< IOBluetooth / objc / IOBluetoothDevice.h> //注意蓝牙的导入
#import< IOBluetooth / objc / IOBluetoothDeviceInquiry.h> //注意蓝牙的导入


int main(int argc,const char * argv [])
{
@autoreleasepool {
IOBluetoothDevice * currentDevice;
NSArray * devices = [IOBluetoothDevice matchedDevices];


for(设备中的id currentDevice){
NSLog(@%i:%@,[currentDevice classOfDevice],[currentDevice name]);
}
}
return 0;
}

感谢任何帮助或指向正确的方向。

解决方案

看起来你缺少,包括项目中的IOBluetooth.framework。您可以通过以下方式添加:



- 点击左侧窗格左上角的项目(蓝色图标)。



- 在中间窗格中,单击Build Phases选项卡。



- 在链接二进制库与库下,单击加号按钮。



- 从列表中查找IOBluetooth.framework,然后点击添加。



>



>



这将确保链接器找到IOBluetooth.framework定义。通过单击左窗格中的框架并在右窗格中查看框架的目标成员资格,可以看到该框架是目标的成员(注意,为了组织目的,我已将框架移到Frameworks组下):


An Xcode beginner's question:

It is my first experience with Xcode 4.6.3.

I am trying to write a very simple console program, that searches for paired BT devices and prints them to an NSLog.

It builds with the following error:

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_IOBluetoothDevice", referenced from:
      objc-class-ref in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I searched like crazy. The common problem should be a reference to a file, of which only the header files are imported and no implementation (*.m-file) is found by the linker. The IOBluetooth library is however, a standard Framework like the Foundation Framework.

What am I missing in my above statement?

I also have tried building it for a 32-bit machine (build fails again). It is clearly a linker error, however I have no idea, to what it relates, except that there is an issue with finding the implementation for IOBluetoothDevice, on both x86 and x64 architecture, while the header files are from a standard included Framework, called IOBluetooth?

For your information my main code "main.m" being:

#import <Foundation/Foundation.h>
#import <IOBluetooth/objc/IOBluetoothDevice.h>          // Note the import for bluetooth
#import <IOBluetooth/objc/IOBluetoothDeviceInquiry.h>   // Note the import for bluetooth


int main(int argc, const char * argv[])
{
    @autoreleasepool {
        IOBluetoothDevice *currentDevice;
        NSArray *devices = [ IOBluetoothDevice pairedDevices];


        for (id currentDevice in devices){
          NSLog(@"%i : %@",[ currentDevice classOfDevice ], [ currentDevice name ]);    
        }
    }
    return 0;
}

Thanks for any help or pointers to the right direction.

解决方案

It looks like you are missing including the IOBluetooth.framework in your project. You can add it by:

-Clicking on your project in the upper left of the left pane (the blue icon).

-In the middle pane, click on the Build Phases tab.

-Under "Link Binary With Libraries", click on the plus button.

-Find the IOBluetooth.framework from the list and hit Add.

This will make sure that the IOBluetooth.framework definitions are found by the linker. You can see that the framework is a member of your target by clicking on the framework in the left pane and seeing the framework's target membership in the right pane (note I've moved the framework under the Frameworks group for organization purposes):

这篇关于Xcode构建失败“架构x86_64的未定义符号”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆