我收到static
个链接错误以提升非标头库。让我们一起解决:</ p>
最终二进制文件应该使用分别构建为较高层的库(例如libbasemainif.a
)构建。其中一个图层使用boost::filesystem
。
查看g++
命令的简化版本:
g++ /mylis/1.a /mylibs/2.a
-L/myboost/Linux-x86_64/lib64
-Wl,-rpath,/myboost/Linux-x86_64/lib64 -Wl,-Bstatic
-lboost_thread-mt -lboost_system-mt -lboost_filesystem-mt -lboost_date_time-mt
-Wl,-Bdynamic
-Wl,-rpath,/myinstall/usr/local/lib64 -L/myinstall/usr/local/lib64 -Wl,
-Bstatic -lmyblahblah-static -Wl,-Bdynamic **-lbasemainif** -lbaseif -ldl -rdynamic -lz -lrt
-L/mypackage1/Linux-x86_64/debug/lib -L /mypackage2/18.1/Linux-x86_64/debug/lib -lpthread -Wl,-rpath,$ORIGIN/../lib64
这是错误:
/blahblah/lib/libbasemainif.a(errorreportfile.o):
In function `boost::filesystem3::remove(boost::filesystem3::path const&, boost::system::error_code&)':
/myboost/Linux-x86_64/include/boost/filesystem/v3/operations.hpp:411:
undefined reference to boost::filesystem3::detail::remove(boost::filesystem3::path const&, boost::system::error_code*)'
collect2: ld returned 1 exit status
-Wl,-Bstatic
g ++命令成功执行。但这不是生产中的选项。libboost_filesystem.a
可用。并且每个层中的所有库都使用来自同一位置的升级。你能告诉我为什么会收到这个错误吗?谢谢
答案 0 :(得分:2)
你应该在引用它的部分之后传递给实现函数的gcc库。类似于:-lbasemainif -lboost_filesystem-mt
。这就是gcc链接器如何解析依赖关系。
Here是非常详细的解释。