私はc ++ 11を使用しますが、C++ 11用に構成されていないいくつかのライブラリも使用しており、何らかの型変換が必要です。特に、std::__cxx11::string
を通常のstd::string
に変換する方法が必要ですが、グーグルでこれを行う方法が見つからず、(string)
を前に配置しても機能しません。
変換しない場合、次のようなリンカーエラーが発生します。
undefined reference to `H5::CompType::insertMember(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, H5::DataType const&) const'
GCC 5を使用している可能性はありますか?
Std :: __ cxx11名前空間またはタグ[abi:cxx11]の型に関連するシンボルへの未定義の参照に関するリンカーエラーが発生した場合、おそらく、_GLIBCXX_USE_CXX11_ABIの異なる値でコンパイルされたオブジェクトファイルをリンクしようとしていることを示していますマクロ。これは、GCCの古いバージョンでコンパイルされたサードパーティライブラリにリンクするときによく発生します。サードパーティのライブラリを新しいABIで再構築できない場合は、古いABIでコードを再コンパイルする必要があります。
標準ライブラリヘッダーを含む次のマクロbeforeを定義すると、問題が解決するはずです:#define _GLIBCXX_USE_CXX11_ABI 0
使用する互換性のないライブラリをすべて再コンパイルできる場合は、コンパイラオプションを使用して実行してください。
-D_GLIBCXX_USE_CXX11_ABI = 1
その後、プロジェクトを再構築します。それができない場合は、プロジェクトのmakefileコンパイラオプションに追加します
-D_GLIBCXX_USE_CXX11_ABI = 0
定義する
#define _GLIBCXX_USE_CXX11_ABI 0/1
も良いですが、おそらくすべてのファイルに追加する必要がありますが、コンパイラオプションはすべてのファイルに対して一度にそれを行います。
私にとっては-D_GLIBCXX_USE_CXX11_ABI = 0は役に立ちませんでした。
GnustlではなくC++ libsバージョンにリンクした後に動作します。
これを入手しました。これを修正する唯一の方法は、mingw-64をすべて更新することです(情報としてmsys2のpacmanを使用しました)。