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处理器)构建的库.应该是显而易见的,但事实并非如此.
之前:
后:
现在,查看导航器中的Products组>右键单击静态库(.a文件)>在Finder中显示,您会注意到它位于Debug-iphonesimulator文件夹而不是Debug-iphoneos.我最初没有注意文件夹名称,或者我可能早就想到了这个.
希望这可以帮助.
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等.通常,该架构必须与您的目标构建平台相匹配.例如
根据不匹配的情况,您必须为目标平台重建库或更改目标平台.
注意:对于胖二进制文件,lipo -info
将打印上述体系结构的组合.
我实际上并不知道我的建议是否正确,但请尝试检查:
如果我是队长明显:)不要评判我:)