Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c “Xcode生成失败”;架构x86“U 64”的未定义符号;_Objective C_Xcode_Macos_Cocoa_Iobluetooth - Fatal编程技术网

Objective c “Xcode生成失败”;架构x86“U 64”的未定义符号;

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

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-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

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

UPD

苹果要求使用arm64架构。不要在项目中使用x32库

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


旧答案

新的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