C++ Boost Logger静态链接:不工作

C++ Boost Logger静态链接:不工作,c++,boost,static-linking,boost-log,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 ..../boo

我有一个使用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\u ALL\u DYN\u链接。否则,它不会链接


有没有办法不使用此宏并克服依赖性问题?如果没有,您建议使用什么解决方案来避免此问题?

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

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

gcc ... -lboost_log ...
你会写信吗

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

在任何情况下,您都不应该定义
BOOST\u ALL\u DYN\u LINK
,因为此宏的意思正好相反-您打算链接到BOOST共享库。

将所有BOOST库编译为第一位的静态库。我很确定你也可以使用bjam选项来实现这一点,但我在/stage/libs下有.a和.so两个文件。我应该把它们分开吗?我尝试了bjam-static,然后我链接到了.a库,它成功了。我不知道这是Qt.pro问题还是什么问题,但似乎在同一路径中同时存在.a和.so库时,它会链接到.so,所以即使指定了其他路径。谢谢你