XCode 中链接库的顺序

Order of linked libraries in XCode

在一个 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 的 header 始终是正确的。只是在代码中可能会调用错误的方法。

谢谢!

Is it possible to know at compile time which version of libpng my project will use?

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