文件是为归档而构建的,而不是被链接的体系结构(i386)

yar*_*rlg 76 iphone xcode linker-errors ipad ios

我要构建静态库.我想在我的iPhone和ipad应用程序中使用.当我尝试运行模拟器时,我得到链接错误.我是iOS开发的新手.善意的帮助;

ld:警告:忽略文件/Users/valuelabs/Desktop/DruvaProject/libraries/libnetUtils.a,文件是为存档而构建的,而不是被链接的体系结构(i386)体系结构i386的未定义符号:
"_ OBJC_CLASS _ $ _ netUtils",引用自:ViewController.o中的objc-class-ref ld:找不到架构i386 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)

我尝试在架构中添加i386.但没有运气

Cod*_*Ray 74

在努力解决同样的问题并遵循更新构建设置,清除链接器搜索路径等所有已接受的答案后,我终于发现了一个对我有用的答案.

在构建之前,请确保选择正确的类型(iPhone模拟器)而不是iOS设备.然后重建.否则,您正试图在Mac(i386)上的模拟器上使用为iOS设备(arm处理器)构建的库.应该是显而易见的,但事实并非如此.

之前:

iOS设备设置

后:

iPhone 5.1模拟器设置

现在,查看导航器中的Products组>右键单击静态库(.a文件)>在Finder中显示,您会注意到它位于Debug-iphonesimulator文件夹而不是Debug-iphoneos.我最初没有注意文件夹名称,或者我可能早就想到了这个.

希望这可以帮助.

  • @ Nour1991尝试将"Build Settings - > Build Active Architecture Only"设置为"No" (13认同)

Gaj*_*han 41

有时这些类型的错误会刺激你!

删除派生数据为我工作:

修复的步骤

1)在XCODE> Windows>项目>选择您的项目>删除派生数据>退出XCODE并重新打开它>如果您获得MAC-O-Linker builed failed错误>参考链接>再次清理和构建.


ach*_*how 28

libnetUtils.a的构建方式与目标不同.

检查libnetUtils构建设置.它正在构建的体系结构及其支持的体系结构列表必须是目标体系结构的(弱)超集.这里的复杂性是生成的体系结构分布在各种设置上:"体系结构","仅构建活动体系结构"和"有效体系结构".

"仅构建活动架构"设置使这一点特别令人困惑.例如,假设您正在为模拟器构建.如果将Debug的"Build active architecture only"设置设置为NO,它将构建"架构"和"有效架构"(可能是armv7等)中列出的所有架构.但是,如果libnetUtils将该设置设置为Yes(Debug:Yes),则它仅适用于i386.因此,当您的链接器尝试将armv7与i386链接时,它会失败.


Kir*_*ran 25

如果我收到忽略文件警告 - 我将lipo -info在忽略的文件上运行以找到它的架构,如下所示

lipo -info libnetUtils.a
Run Code Online (Sandbox Code Playgroud)

这将打印i386,armv6,armv7,armv7s,x86_64等.通常,该架构必须与您的目标构建平台相匹配.例如

  • i386 = ios模拟器或mac os x上的32位构建
  • armv6 armv7 arm7s = ios设备
  • x86_64 =在mac os x上构建64位

根据不匹配的情况,您必须为目标平台重建库或更改目标平台.

注意:对于胖二进制文件,lipo -info将打印上述体系结构的组合.

  • 虽然,这没有回答OP。这是调试此问题的好工具。我想知道的是,如何使用上述所有架构构建二进制文件? (2认同)

Ale*_*ert 9

我实际上并不知道我的建议是否正确,但请尝试检查:

  • 选择您的项目
  • 选择"构建设置"
  • 检查架构:
    • 有效的架构应该是"armv6 armv7"
    • 支持的平台应该是"iphonesimulator iphoneos"(也许iPad,我不知道)
    • 基础SDK - 您的iOS SDK(我有iOS 5.0).

如果我是队长明显:)不要评判我:)

  • 除了亚历山大的建议,我建议你确保'Build Active Architecture Only'设置为'NO'.这最近惹恼了我. (17认同)

Cod*_*aFi 5

这意味着您尝试使用的库不是为iOS模拟器普遍编译的(i386符号适用于Mac).在实际设备上运行它应该可以正常工作.