我正在使用vagrant在多个版本的Ubuntu(12.04
,14.04
和16.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
下的。
怎么样,因为版本号是一样的?我该怎么做才能使我的代码编译?
答案 0 :(得分:0)
问题与不同的gcc版本有关。
最好的办法是在每个Ubuntu下使用默认存储库中的gcc
。