1. ホーム
  2. c++

std::__cxx11::string から std::string への変換

2023-09-29 02:42:21

質問

私は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 でコードを再コンパイルする必要があります。

出典 GCC 5 リリースノート/デュアル ABI

以下のマクロを定義する の前に を標準ライブラリヘッダを含めて定義すると、問題が解決するはずです。 #define _GLIBCXX_USE_CXX11_ABI 0