对库

时间:2015-12-15 18:57:54

标签: c++ boost static-linking

我收到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可用。并且每个层中的所有库都使用来自同一位置的升级。

你能告诉我为什么会收到这个错误吗?谢谢

1 个答案:

答案 0 :(得分:2)

你应该在引用它的部分之后传递给实现函数的gcc库。类似于:-lbasemainif -lboost_filesystem-mt。这就是gcc链接器如何解析依赖关系。

Here是非常详细的解释。