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で構築されているようです。
バージョン番号は同じなので、どうですか?私のコードをコンパイルするために何ができるでしょうか?
あなたのツールチェーンをアップデートするオプションはありますか? – StoryTeller
私はその提案を完全に理解しているかどうかはわかりませんが、ほとんどの開発者はC++ 11を使用しないので、強制的に使用したくありません。 – Jav
私の提案はあなたが示したシンボルに由来しています。 'libtinyxml 16.04'は' 14.04'とは異なるバージョンの標準ライブラリを使ってビルドされています。ここでバイナリ互換性は約束されていないので、ツールチェーンを更新する必要があります。また、C++ 11/14をサポートするコンパイラを使用しても、新しい言語機能をすべて使用する必要はありません。あなたはまだかなり正当なC++ 03を書くことができます。 – StoryTeller