Xcode初学者的问题:
这是我第一次使用Xcode 4.6.3。
我试图编写一个非常简单的控制台程序,搜索配对的BT设备并将它们打印到NSLog上。
它生成时有以下错误:
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)
我疯狂地搜寻。常见的问题应该是对文件的引用,其中只有导入头文件,链接器没有找到实现(*.m文件)。然而,IOBluetooth库是一个标准框架,类似于Foundation。
我在上面的陈述中遗漏了什么?
我也尝试过为32位的机器构建它(构建再次失败)。这显然是一个链接器错误,但是我不知道它与什么相关,只是在x86和x64体系结构上查找x86的实现存在问题,而头文件来自一个名为IOBluetooth的标准包含框架?
供您参考,我的主要代码"main.m“是:
#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;
}
感谢您对正确方向的任何帮助或指点。
发布于 2014-03-28 00:54:29
UPD
苹果要求使用arm64体系结构。不要在项目中使用x32库
所以下面的答案已经不正确了!
旧答案
新的Xcode 5.1将体系结构armv7、armv7s和arm64设置为默认值。
有时,“构建失败”未定义的体系结构x86_64“”符号的错误可能是由此引起的。因为有些libs (不是苹果的)最初是为x32编译的,不支持x64。
因此,您需要的是像这样更改项目目标的“架构”
NB.如果你在使用Cocoapods -你应该对"Pods“目标做同样的事情。
发布于 2015-12-17 00:25:42
架构的未定义符号x86_64:"_OBJC_CLASS_$_xxx",引用自: objc-class-ref中的yyy.o
这通常意味着从类"yyy“调用"xxx”(可能是一个框架或类)。编译器无法定位"xxx“,因此会发生此错误。
您需要通过右键单击导航窗口中的项目文件夹并点击“将文件添加到"YourProjectName"”“选项来添加缺少的文件(在本例中为"xxx")。
弹出窗口将在Finder中打开项目文件。在那里,您可以看到丢失的文件并将它们添加到您的项目中。不要忘记选中“复制项(如果需要的话)”框。祝你好运!
发布于 2016-01-01 11:34:46
当派生数据被破坏时,我还在Xcode 7.2上看到了这个错误(在我的例子中,我中断了构建,并怀疑这是根本原因)。
因此,如果其他解决方案(尤其是克里斯和勇敢的解决方案,我怀疑更有可能)不适合你的问题,试着删除派生数据(选择:窗口/项目/派生数据->删除)和重建。
(补充供其他人参考-我知道原来的问题已被正确回答)。
https://stackoverflow.com/questions/18408531
复制相似问题