2017-01-04 24 views
1

Я использую бродягу для создания того же кода в нескольких версиях Ubuntu (12.04, 14.04 и 16.04).Эта же библиотека определяет разные символы под 16.04 и под 14.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

Является ли обновление вашей инструментальной цепочки опцией? – StoryTeller

+0

Я не уверен, что полностью понял предложение, но большинство наших разработчиков не используют C++ 11, поэтому я не хочу использовать его. – Jav

+0

Мое предложение проистекает из символов, которые вы показали. 'libtinyxml 16.04' построен с использованием другой версии стандартной библиотеки, чем' 14.04'. Поскольку двоичная совместимость здесь не обещана, вам необходимо обновить свою инструментальную цепочку. Кроме того, использование компилятора, который поддерживает C++ 11/14, не означает, что вам нужно начать использовать все новые функции языка. Вы все еще можете написать то, что является довольно законным C++ 03. – StoryTeller

ответ

0

Проблема была связана с другой версией gcc.

Лучше всего использовать под каждым Ubuntu, gcc, который находится в репозиториях по умолчанию.