2014-01-16 28 views
1

我在几天前从Windows切换,我发现有点混淆了Xcode中的链接过程。 我有一个静态库,我想使用名为nag C库的文件是“libnagc_nag.a”。 如果我将“/opt/NAG/clmi623dgl/lib/libnagc_nag.a”添加到“其他链接器标志”,程序运行完美。 另一方面,如果我去“构建阶段 - >链接与库二进制 - > + - >添加其他”并添加“libnagc_nag.a”,库文件现在出现在项目导航器中,但我得到以下错误构建成功后,它会尝试运行它。Xcode:添加链接器标志和“链接库与二进制文件”之间的区别

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 

我的问题是:

为什么它有什么不同? 它认为这是一个动态库吗? 我如何在第二种情况下解决这个问题?

回答

2

我在this link找到了答案。问题是链接器标志对于动态库和静态库都是相同的,并且文件扩展名被从中删除。因此,如果您有一个名称相同且扩展名不同的静态和动态库,链接器将默认选择库的动态版本。即使您在“链接二进制库”菜单中选择了静态版本,也会发生这种情况。然后,如果应用程序找不到动态库,则会出现错误。所以,这个问题的答案是:

1)如果没有一个动态库具有相同的名称,它不会有任何区别。 2)链接器只知道库的名称,所以默认选择动态版本。 3)解决方案可以重命名库或使用第一种方法。

0

您的项目是否有多个构建目标?如果是这样,你是否将库添加到适当的目标?通过再次查看“链接二进制库”或通过在Project Navigator中选择框架并查看“文件检查器”窗格中的“目标成员”来检查此问题。

另外,您的框架搜索路径设置是否正确?点击项目导航器顶部的项目,然后点击屏幕顶部中心的“Build Settings”,然后进入“搜索路径”并确保包含适当的路径。

+0

不,它只有一个目标。它只是默认的C++项目,我在NAG提供的示例中为文本更改了主文本。 图书馆被正确添加,或者至少这是我在“目标成员资格”中看到的内容。此外,框架搜索路径和lib路径都是“libnagc_nag.a”文件的路径。 – German

相关问题