c++ - 同一个库在16.04下和14.04下定义了不同的符号

标签 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 下。

为什么版本号一样?我该怎么做才能编译我的代码?

最佳答案

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

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

关于c++ - 同一个库在16.04下和14.04下定义了不同的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41470139/

相关文章:

c++ - VC++ LNK2019 错误我似乎无法修复

c++ - 使用公钥 : BER decode error 加密消息

python-2.7 - 如何在 Ubuntu 中将 python 2.7.12 升级到 python 2.7.14?

node.js - 设置 npm config proxy ubuntu 后,npm 不起作用

java - Oracle java包安装不成功

c++ - 使用指向文件的指针从 vector 中保存对象

c++ - 如何在内联汇编中实现这个?

c++ - 如何在 C++ 中创建带返回值的内联作用域?

c++ - 模板别名的标识

c++ - 将构造函数中动态分配的数组分配给唯一的智能指针成员变量