0

我有一个包含一些 asio 头文件的项目,我已经静态链接了 boost_system,但是 ASIO 不断将 -lboost_system 添加到链接器中,因此生成的二进制文件取决于 boost_system 的动态版本,我有 -DBOOST_ALL_NO_LIB(在“其他链接标志”中) 以防止自动链接,但它似乎被忽略了。

我将 XCode 4 与 clang 和 c++11 一起使用

还有其他方法可以防止自动链接吗?

4

1 回答 1

0

结果是,当我将 .a 文件添加到我的项目时,我需要将“文件类型”更改为 Match-O 目标代码,(正如这个答案指出的那样https://stackoverflow.com/a/6124806/520221注释) ,即使您将文件添加到构建阶段选项卡中的“链接文件到可执行文件”。

所以我认为 ASIO 在某种程度上知道该库是否已经包含(静态或动态)。由于“文件类型”它永远不会被链接,所以 asio 包含 -lboost_system 标志。

另一个提示,您必须使用 libstdc++ 构建 boost 和您的项目,它不适用于 libc++,我不知道为什么。看到这个如何在 xcode/clang/macos 中针对使用 libc++ 编译的静态库编译应用程序?,我认为它是一个错误或什么的

于 2013-04-19T01:30:51.353 回答