首页 文章

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

提问于
浏览
1

我正在使用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

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

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

相关问题