相同的库定义了16.04和14.04下的不同符号

时间:2017-01-04 17:46:23

标签: c++ c++11 ubuntu-16.04 linkage undefined-symbol

我正在使用vagrant在多个版本的Ubuntu(12.0414.0416.04)下构建相同的代码。

16.04下,我有一个缺少的符号:

undefined reference to TiXmlElement::TiXmlElement(std::string const&)

链接是使用相同版本的libtinyxml完成的(见下文),但是当我查看库中的符号时,会有一些小的区别:

Ubuntu 14.04:

$ ldd libcustomlib.so
libtinyxml.so.2.6.2 => /usr/lib/x86_64-linux-gnu/libtinyxml.so.2.6.2 (0x00007fe6c9789000)
$ objdump -TC /usr/lib/x86_64-linux-gnu/libtinyxml.so.2.6.2 | grep "TiXmlElement::TiXmlElement(std"
000000000000a0f0 g  DF .text  0000000000000072  Base  TiXmlElement::TiXmlElement(std::string const&)
000000000000a0f0 g  DF .text  0000000000000072  Base  TiXmlElement::TiXmlElement(std::string const&)

Ubuntu 16.04:

$ ldd libcustomlib.so
libtinyxml.so.2.6.2 => /usr/lib/x86_64-linux-gnu/libtinyxml.so.2.6.2 (0x00007f08eb3c0000)
$ objdump -TC /usr/lib/x86_64-linux-gnu/libtinyxml.so.2.6.2 | grep "TiXmlElement::TiXmlElement(std"
000000000000aad0 g  DF .text  0000000000000072  Base  TiXmlElement::TiXmlElement(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
000000000000aad0 g  DF .text  0000000000000072  Base  TiXmlElement::TiXmlElement(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)

正如您所看到的,在16.04下,库似乎是使用c ++ 11构建的,而不是14.04下的。

怎么样,因为版本号是一样的?我该怎么做才能使我的代码编译?

1 个答案:

答案 0 :(得分:0)

问题与不同的gcc版本有关。

最好的办法是在每个Ubuntu下使用默认存储库中的gcc