Boost Logger 静态链接:不工作

Boost Logger Static Linking: Not Working

我有一个使用 boost 记录器库的 Qt 应用程序。我想让它成为一个独立的。但是,在我为静态 linking 管理库之后,应用程序仍然依赖于 boost 库。 我包含的库是:

    ..../boost_1_61_0_b1/stage/lib/libboost_regex.a
    ..../boost_1_61_0_b1/stage/lib/libboost_log_setup.a
    ..../boost_1_61_0_b1/stage/lib/libboost_thread.a
    ..../boost_1_61_0_b1/stage/lib/libboost_log.a
    ..../boost_1_61_0_b1/stage/lib/libboost_system.a
    ..../boost_1_61_0_b1/stage/lib/libboost_filesystem.a

应用程序编译(经过无数次尝试)。但是,当我使用 ldd 工具时,它会在依赖列表中显示 boost 库。

注意:我必须定义BOOST_ALL_DYN_LINK。否则,它不会 link.

有什么办法可以不用这个宏来克服依赖问题吗?如果没有,您有什么建议来解决这个问题?

在现代类 UNIX 系统上默认 gcc links 默认带有共享库。为了强制执行静态 linking,您可以将 -static 添加到 linking 命令行(请参阅 docs)或确保 gcc 找不到共享库但只能找到静态库(例如,在 link 进行项目时将共享库移动到单独的目录)。请注意,-static 将使所有库 link 静态编辑,包括 libstdc++。

或者,您可以直接指定静态库,而无需 -l 开关。不过,您必须使用库的完整路径,而不是

gcc ... -lboost_log ...

你会写

gcc ... ..../boost_1_61_0_b1/stage/lib/libboost_log.a ...

在任何情况下,你都应该定义BOOST_ALL_DYN_LINK,因为这个宏的意思恰恰相反——你打算link使用Boost [=25] =]共享个库。