2017-01-04 5 views
1

私はUbuntuの複数のバージョン(12.04,14.04および16.04)で同じコードを作成するために迷路を使用しています。 16.04の下同じライブラリで、16.04未満と14.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:あなたは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&) 

、ライブラリがない14.04下にしながら、C++ 11で構築されているようです。

バージョン番号は同じなので、どうですか?私のコードをコンパイルするために何ができるでしょうか?

+0

あなたのツールチェーンをアップデートするオプションはありますか? – StoryTeller

+0

私はその提案を完全に理解しているかどうかはわかりませんが、ほとんどの開発者はC++ 11を使用しないので、強制的に使用したくありません。 – Jav

+0

私の提案はあなたが示したシンボルに由来しています。 'libtinyxml 16.04'は' 14.04'とは異なるバージョンの標準ライブラリを使ってビルドされています。ここでバイナリ互換性は約束されていないので、ツールチェーンを更新する必要があります。また、C++ 11/14をサポートするコンパイラを使用しても、新しい言語機能をすべて使用する必要はありません。あなたはまだかなり正当なC++ 03を書くことができます。 – StoryTeller

答えて

0

問題は異なるgccバージョンに関連していました。

それぞれのUbuntuの下で、デフォルトのリポジトリにあるgccの下で使うことをお勧めします。

関連する問題