Xcode构建失败"架构x86_64的未定义符号"

Ris*_*Sun 154 macos xcode cocoa objective-c 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 architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

我疯狂地搜索.常见问题应该是对文件的引用,其中只导入头文件,链接器不会找到实现(*.m-file).然而,IOBluetooth库是一个像Foundation Framework一样的标准框架.

我在上述陈述中缺少什么?

我也尝试过为32位机器构建它(再次构建失败).这显然是一个链接器错误,但我不知道它与它有什么关系,除了在x86和x64架构上找到IOBluetoothDevice的实现存在问题,而头文件来自标准包含的Framework,称为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;
}
Run Code Online (Sandbox Code Playgroud)

感谢您提供任何帮助或指向正确的方向.

Chr*_*ahl 115

您似乎缺少包括项目中的IOBluetooth.framework.您可以通过以下方式添加:

- 单击左窗格左上角的项目(蓝色图标).

- 在中间窗格中,单击"构建阶段"选项卡.

- 在"Link Binary With Libraries"下,单击加号按钮.

- 从列表中找到IOBluetooth.framework并点击Add.

在此输入图像描述

在此输入图像描述

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

在此输入图像描述

  • 有效!也非常感谢您努力拍摄一些屏幕截图! (3认同)

Ale*_*pov 49

UPD

Apple 需要使用arm64架构.不要在项目中使用x32库

所以下面的答案不再正确!


老答案

新的Xcode 5.1将架构armv7,armv7s和arm64设置为默认值.

有时错误"构建失败"架构x86_64""的未定义符号可能由此引起.因为,一些libs(不是Apple的)最初是为x32编译的,不支持x64.

所以你需要的是改变你的项目目标的"架构"

NB.如果你正在使用Cocoapods - 你应该为"Pods"目标做同样的事情.

在此输入图像描述

  • 基本上我从Valid Architectures属性中删除了arm64 thingy.然后如上所示,我将强制只看看有效架构中的内容! (3认同)

Con*_*sed 27

架构x86_64的未定义符号:"_ OBJC_CLASS _ $ _ xxx",引自:yyy.o中的objc-class-ref

这通常意味着,您从"yyy"类调用"xxx"(可能是框架或类).编译器无法找到"xxx",因此会发生此错误.

您需要通过在导航器窗口中右键单击项目文件夹来添加缺少的文件(在本例中为"xxx"),然后点击" 将文件添加到" YourProjectName " "选项.

弹出窗口将在Finder中打开您的项目文件.在那里,您可以看到丢失的文件,只需将它们添加到您的项目中即可.不要忘记选中" 如果需要,复制项目 "框.祝好运!!


Ali*_*dle 16

我也看到有关的Xcode 7.2此错误时所得到的数据损坏(在我来说,我中断的构建和犯罪嫌疑人,这是根本原因).

因此,如果其他解决方案(特别是我怀疑更可能是Chris和BraveS)不适合您的问题,请尝试删除派生数据(选择:窗口/项目/派生数据 - >删除)并重新构建.

(已添加供其他人参考 - 我知道原始问题已得到正确回答).


Uda*_*Sri 12

在我的案例中,它不是一个库,它是一些类..

体系结构x86_64的未定义符号:
"_ OBJC_CLASS _ $ _ ClassNmae",引自:SomeClassName中的objc-class-ref".

d:找不到架构x86_64的符号

clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

解决方案 我在Xcode中有几个目标,有几个模式(生产,开发等)..我新添加的一些实现(Class.m)在

Xcode-> Targets-> Build Phases-> Compile Sources

所以我不得不手动添加它们.

然后我可以成功编译和构建.


Wil*_*iuk 12

在Xcode中9.0b5你可能会遇到这个,因为Xcode的9.0b5中有一个错误在那里,当你添加的源代码,它不会兑现目标设置.您必须在以下字词后手动设置每个文件的目标:

Xcode项目与手动目标会员插图


ylg*_*hyh 8

我也遇到了同样的问题,上面的方法都行不通.我不小心删除了下面目录中的文件. 在此输入图像描述

要么

〜/资源库/开发/ Xcode中/ DerivedData /

在此输入图像描述

  • 对于那些想知道实际路径/命令是什么的人:它是`〜/ Library/Developer/Xcode/DerivedData /`通过CLI你可以清理目录,如下所示:`rm -rf~/Library/Developer/Xcode/DerivedData/` (4认同)

lon*_*tle 7

我在这里尝试了几乎所有的东西,但我的问题原来是以前的 cocoapods 构建的残余。对我有用的是:

  1. rm -Rf Pods; pod install
  2. 删除派生数据(窗口/项目...选择您的目标。单击删除按钮)
  3. 重建


Agg*_*sor 6

我发现如果将包含 Objective-C 文件的文件夹拖到项目中,也会发生这种情况。如果该文件夹显示为蓝色,我认为这表明它没有正确链接。您可以验证这一点(如果您使用版本控制),因为无论何时添加新文件,pbxproj 文件都应该使用指向这些新文件的链接进行更新。但是,您可能会发现在添加了 pbxproj 文件没有更改的文件夹后(因此存在链接错误)。所以你会得到自动完成工作,它会找到你导入的类,但是当它实际构建图像时,它会失败并显示此错误代码。

解决方案是不添加文件夹,而是添加文件。这样做,你应该会看到 pbxproj 文件更新,它应该修复这个错误。

这也假设您已经完成了上面建议的操作并正确链接了所有正确的框架。


why*_*yoz 5

更新到Xcode 7.1时,您可能会看到此类错误,并且无法通过上述任何答案解决.在我的情况下,其中一个症状是应用程序在设备上运行而不是在模拟器中运行.您可能会看到与您正在使用的几乎所有框架相关的大量错误.

修复其实很简单.您只需要从"目标搜索路径"设置中删除一个条目,该设置位于"目标">"构建设置">"搜索路径"部分中(确保选中"全部"选项卡)

在此输入图像描述

如果您在主目标或测试目标中看到此处的另一个条目(除$(继承)之外),只需从所有目标中删除错误路径并重建.


Rap*_*ael 5

我知道这是一个老问题,但今天遇到了同样的错误,上述解决方案都没有奏效。

但是通过设置选项修复了它:

Project -> Architecture -> Build Active Architecture Only
Run Code Online (Sandbox Code Playgroud)

是的

和项目正确编译和构建


Ani*_*ale 5

我多次遇到过这个问题。这通常发生在您删除构建文件夹时。

简单的解决方案是重新集成并安装 pod 文件。

pod deintegrate
pod install
Run Code Online (Sandbox Code Playgroud)


Nir*_*aul 5

苹果M1芯片也出现这种情况。

这是我的解决方案,只需选中Open using Rosetta 在此输入图像描述 脚步:

  1. 转到应用程序>右键单击xcode>获取信息>选中使用Rosetta打开
  2. 重新启动系统。