【问题标题】:How can I disable automatic linking using boost asio?如何使用 boost asio 禁用自动链接?
【发布时间】:2013-04-12 07:11:02
【问题描述】:

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

我正在使用带有 clang 和 c++11 的 XCode 4

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

【问题讨论】:

  • 您应该将BOOST_ALL_NO_LIB 放在“预处理器宏”中,而不是将-DBOOST_ALL_NO_LIB 放在“其他链接标志”中。也就是说,我不确定这会有所作为。
  • 没有运气将该宏放入“预处理器宏”

标签: c++ xcode boost boost-asio clang


【解决方案1】:

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

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

另一个提示,您必须使用 libstdc++ 构建 boost 和您的项目,它不适用于 libc++,我不知道为什么。看到这个How I do compile a application against a static library compiled with libc++ in xcode/clang/macos?,我认为它是一个错误或什么

【讨论】:

    猜你喜欢
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2011-10-15
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2016-10-03
    相关资源
    最近更新 更多