我有一个使用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。否则,它没有链接。
有没有办法不使用这个宏并克服依赖问题?如果没有,你建议采取什么解决方案来解决这个问题?
答案 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 共享库链接。