我几天前从Windows切换,我发现有点混淆xcode中的链接过程。 我有一个我想使用的静态库叫做nag C库,其文件是“libnagc_nag.a”。 如果我将“/opt/NAG/clmi623dgl/lib/libnagc_nag.a”添加到“其他链接器标志”,程序运行完美。 另一方面,如果我去“构建阶段 - >链接二进制文件库 - > + - >添加其他”并添加“libnagc_nag.a”,库文件现在出现在项目导航器中,但我得到了构建成功后,它会尝试运行它。
dyld: Library not loaded:
/fserver/mo/cl23/CL23.3/CLMI623DG_build/BUILD_mac_64/climp/LIBS/nag_lm/libnagc_nag.dylib
Referenced from: /Users/german/Library/Developer/Xcode/DerivedData/myproj-bjepqyzlzkayspddtaspmmzxgaid/Build/Products/Debug/myproj
Reason: image not found
我的问题是:
为什么会有所不同? 它认为它是一个动态库吗? 如何在第二种情况下解决这个问题?
答案 0 :(得分:4)
编辑:我删除了指向文章的链接,因为它已经过时了。
问题是动态和静态库的链接器标志是相同的,并且从中删除了文件扩展名。因此,如果您有一个具有相同名称且只有不同扩展名的静态和动态库,则链接器将默认选择该库的动态版本。即使您在“带库的链接二进制文件”菜单中选择了静态版本,也会发生这种情况。然后,如果应用程序找不到动态库,则会出现错误。所以,问题的答案是:
1)如果没有具有相同名称的动态库,它将没有任何区别。 2)链接器只知道库的名称,因此默认情况下会选择动态版本。 3)解决方案可以重命名库或使用第一种方法。
答案 1 :(得分:0)
您的项目是否有多个构建目标?如果是这样,您是否将库添加到适当的目标?通过再次查看“使用库链接二进制文件”或通过选择Project Navigator中的框架并在“文件检查器”窗格中查看“目标成员资格”来查看此内容。
此外,您的框架搜索路径是否设置正确?单击项目导航器顶部的项目,然后单击屏幕顶部中心的“构建设置”,然后转到“搜索路径”并确保包含适当的路径。