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] =]共享个库。
我有一个使用 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] =]共享个库。