Objective c “Xcode生成失败”;架构x86“U 64”的未定义符号;
Xcode初学者的问题: 这是我第一次体验Xcode 4.6.3 我正试图编写一个非常简单的控制台程序,搜索配对的BT设备并将其打印到NSLog 它生成时出现以下错误:Objective c “Xcode生成失败”;架构x86“U 64”的未定义符号;,objective-c,xcode,macos,cocoa,iobluetooth,Objective C,Xcode,Macos,Cocoa,Iobluetooth,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 architect
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-file)。然而,iBuLUTHORT库是一个标准框架,类似于基础框架。
我在上述声明中遗漏了什么
我还尝试为32位机器构建它(构建再次失败)。这显然是一个链接器错误,但我不知道它与什么有关,除了在x86和x64体系结构上查找IOBluetoothDevice的实现存在问题,而头文件来自一个标准的包含框架,称为IOBluetooth
供您参考,我的主代码“main.m”是:
#导入
#导入//注意蓝牙的导入
#导入//注意蓝牙的导入
int main(int argc,const char*argv[]
{
@自动释放池{
IOBluetoothDevice*当前设备;
NSArray*设备=[IOBluetoothDevice pairedDevices];
用于(设备中的当前设备id){
NSLog(@“%i:%@,[currentDevice Classof Device],[currentDevice name]);
}
}
返回0;
}
感谢您提供的任何帮助或指向正确方向的指针。您的项目中似乎缺少了IOBluetooth.framework。您可以通过以下方式添加它:
- 单击左窗格左上角的项目(蓝色图标)
- 在中间窗格中,单击构建阶段选项卡
- 在“将二进制文件链接到库”下,单击加号按钮
- 从列表中找到IOBluetooth.framework并点击Add
旧答案 新的Xcode 5.1将体系结构armv7、armv7s和arm64设置为默认值 有时,架构x86_64“”的错误“构建失败”未定义符号可能是由此引起的。因为,有些库(不是苹果的库)最初是为x32编译的,不支持x64 因此,您需要的是像这样更改项目目标的“体系结构” 注意。如果你使用椰子荚-你应该对“荚”目标也这样做
当更新到Xcode 7.1时,您可能会看到这种类型的错误,上面的任何答案都无法解决。我的一个症状是应用程序在设备上运行,而不是在模拟器中运行。您可能会看到与您使用的几乎所有框架相关的大量错误 解决方法其实很简单。您只需从“目标>构建设置>搜索路径”部分的“框架搜索路径”设置中删除一个条目(确保选中了“全部”选项卡) 如果您在这里看到主目标或测试目标的另一个条目(除了$(继承的)),只需从所有目标中删除错误路径并重新生成。 架构x86_64的未定义符号:“\u OBJC\u CLASS\u$\ u xxx”, 引用自: yyy.o中的objc类引用 这通常意味着,您正在从类“yyy”调用“xxx”(它可能是一个框架或类)。编译器找不到“xxx”,因此发生此错误 您需要在navigator窗口中右键单击您的项目文件夹并点击“将文件添加到“YourProjectName””选项来添加缺少的文件(在本例中为“xxx”)
弹出窗口将在Finder中打开项目文件。在那里,您可以看到丢失的文件,只需将它们添加到项目中即可。不要忘记勾选“根据需要复制项目””框。祝你好运 在Xcode 7.2上,当派生数据损坏时,我也看到了这个错误(在我的例子中,我中断了构建,并怀疑这是根本原因) 因此,如果其他解决方案(尤其是Chris和BraveS的解决方案,我怀疑它们更可能)不适合您的问题,请尝试删除派生数据(选择:窗口/项目/派生数据->删除)并重新构建
(添加供他人参考-我知道原始问题已正确回答)。我也有同样的错误,因为我没有删除文件,只是删除了对它的引用。在Finder中查找文件并将其删除会有所帮助。我也遇到了同样的问题,上面的方法将不起作用。我不小心删除了它下面目录中的文件。 或 ~/Library/Developer/Xcode/DerivedData/
我发现,如果将包含Objective-C文件的文件夹拖动到项目中,也会出现这种情况。如果该文件夹显示为蓝色,我认为这表明它没有正确链接。您可以验证这一点(如果使用版本控制),因为无论何时添加新文件,pbxproj文件都应该更新为指向这些新文件的链接。但是,您可能会发现,在添加文件夹后,pbxproj文件没有更改(因此存在链接错误)。因此,您将获得自动完成工作,它将找到您导入的类,但当它实际构建映像时,它将失败,并出现此错误
#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;
}
nm -g file.o
nm -gC file.o
Project -> Architecture -> Build Active Architecture Only
target 'SomeTargetTests' do
inherit! :search_paths
end
rm -rf ~/Library/Developer/Xcode/DerivedData/*
pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
target 'XYZ_ProjectTarget' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for XYZ_ProjectTarget
pod 'pod_name'
target 'XYZ_TargetTests' do
inherit! :search_paths
# Pods for testing
end
target 'XYZ_TargetUITests' do
# Pods for testing
end
end
post_install do |installer_representation|
installer_representation.project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ARCHS'] = 'armv7 armv7s'
end
end
end