g ++无法与libboost_date_time链接

时间:2018-03-10 20:44:39

标签: boost linker g++

所以我怀疑这是因为我最近在我的系统上制作和安装gcc-7.3.0(ubuntu 14.04)。这曾经有用但现在已经不再有了,我真的无法弄清楚原因。 任何建议都会受到欢迎。

感谢: 丹

g ++ - 7.3.0没有编译

dan@chicabuntu:~/RNN/GAForest$ g++  -o validateStemForest validateStemsForest.o prog.o loadSequences.o stem.o stemBinder.o   -std=c++11 -DRANDSOURCE=7 -lm -lgomp  -L/usr/lib/x86_64-linux-gnu  -lboost_date_time

validateStemsForest.o: In function `unsigned short boost::date_time::month_str_to_ushort<boost::gregorian::greg_month>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
validateStemsForest.cpp:(.text._ZN5boost9date_time19month_str_to_ushortINS_9gregorian10greg_monthEEEtRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[_ZN5boost9date_time19month_str_to_ushortINS_9gregorian10greg_monthEEEtRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE]+0xab): undefined reference to `boost::gregorian::greg_month::get_month_map_ptr[abi:cxx11]()'

collect2:错误:ld返回1退出状态

但是,我有正确的库:

dan@chicabuntu:~/RNN/GAForest$ ls -ltrh /usr/lib/x86_64-linux-gnu/libboost_date_time.*
lrwxrwxrwx 1 root root   28 Jun 21  2014 /usr/lib/x86_64-linux-gnu/libboost_date_time.so -> libboost_date_time.so.1.54.0
-rw-r--r-- 1 root root  67K Jun 21  2014 /usr/lib/x86_64-linux-gnu/libboost_date_time.so.1.54.0
-rw-r--r-- 1 root root 143K Jun 21  2014 /usr/lib/x86_64-linux-gnu/libboost_date_time.a

图书馆有我试图链接到

的功能
dan@chicabuntu:~/RNN/GAForest$ nm -D /usr/lib/x86_64-linux-gnu/libboost_date_time.so| grep get_month_map_ptr
0000000000008960 T _ZN5boost9gregorian10greg_month17get_month_map_ptrEv

图书馆在路径

dan@chicabuntu:~/RNN/GAForest$ echo $LD_LIBRARY_PATH
/usr/local/cuda-8.0/lib64/:/usr/local/cuda/lib64:/usr/local/cuda-8.0/lib64/:/usr/local/cuda/lib64::/usr/local/lib:/usr/local/lib/x86_64-linux-gnu:/usr/lib/nvidia-375:/usr/local/lib:/usr/local/lib/x86_64-linux-gnu:/usr/lib/nvidia-375:/usr/lib:/usr/lib/x86_64-linux-gnu

以下是我使用的g ++和boost的版本:

dan@chicabuntu:~/RNN/GAForest$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/7.3.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-7.3.0/configure --disable-multilib
 Thread model: posixqqw
gcc version 7.3.0 (GCC)

dan@chicabuntu:~/RNN/GAForest$ dpkg -S /usr/include/boost/version.hpp
libboost1.54-dev: /usr/include/boost/version.hp

1 个答案:

答案 0 :(得分:1)

未定义符号末尾的

[abi:cxx11]可能是一个线索。 新版本的gcc具有不同的ABI以支持c ++ 11:https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html。如果您的boost库是使用旧的ABI编译的,它们不会与使用新ABI编译的代码链接。

尝试使用-D_GLIBCXX_USE_CXX11_ABI=0

构建代码