我正在使用 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
下。
为什么版本号一样?我该怎么做才能编译我的代码?
最佳答案
问题与不同的 gcc 版本有关。
最好的办法是在每个 Ubuntu 下使用默认存储库中的 gcc
。
关于c++ - 同一个库在16.04下和14.04下定义了不同的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41470139/