Boost Logger静态链接:不工作

时间:2016-06-20 19:57:41

标签: c++ boost static-linking boost-log

我有一个使用boost记录器库的Qt应用程序。我想把它变成一个独立的。但是,在我管理静态链接库之后,应用程序仍然依赖于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。否则,它没有链接。

有没有办法不使用这个宏并克服依赖问题?如果没有,你建议采取什么解决方案来解决这个问题?

1 个答案:

答案 0 :(得分:0)

默认情况下,在类似现代UNIX的系统上,gcc默认使用共享库链接。为了强制静态链接,您可以将-static添加到链接命令行(请参阅docs)或确保gcc找不到共享库但只查找静态库(例如,移动在链接项目时将共享库共享到一个单独的目录中。请注意,-static将使所有库静态链接,包括libstdc ++。

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

gcc ... -lboost_log ...
你会写

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

在任何情况下,您都应该定义BOOST_ALL_DYN_LINK,因为这个宏意味着完全相反 - 您打算与Boost 共享库链接。