XCode 中链接库的顺序

Posted

技术标签:

【中文标题】XCode 中链接库的顺序【英文标题】:Order of linked libraries in XCode 【发布时间】:2015-02-06 15:58:05 【问题描述】:

在 XCode 项目中,我链接了一个库 (libpng) 和一个框架 (opencv)。该框架已包含我的库的旧版本。

现在,当我在“Link Binary With Libraies”中转到 XCode 时,如果我将 opencv 放在第一位,libpng 放在第二位,我的代码将使用 opencv 中的内容,即旧版本。

我的问题:是否有可能在编译时知道我的项目将使用哪个版本的 libpng?我想确定的是,即使有人弄乱了我的库的链接顺序,我仍然使用正确的。

我已经尝试过使用编译指令检查 libpng 的版本,如下所示:

#if PNG_LIBPNG_VER_MINOR !=6
  #error "Wrong libpng version. Required is 1.6.9."
#endif

但这不是一个解决方案,因为声明 PNG_LIBPNG_VER_MINOR 的标头始终是正确的。只是在代码中可能会调用错误的方法。

谢谢!

【问题讨论】:

【参考方案1】:

是否可以在编译时知道我的项目将使用哪个版本的 libpng?

在这种情况下不是。翻译的参数不同于链接器的参数。没有保证。

【讨论】:

以上是关于XCode 中链接库的顺序的主要内容,如果未能解决你的问题,请参考以下文章

为啥链接库的顺序有时会导致 GCC 出错?

为啥链接库的顺序有时会导致 GCC 出错?

gcc/g++链接时.o文件及库的顺序问题

linux找动态链接库默认位置,linux动态链接库的加载顺序,编译时找静态库默认位置,找动态库,找静态库

linux找动态链接库默认位置,linux动态链接库的加载顺序,编译时找静态库默认位置,找动态库,找静态库

GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结