web-dev-qa-db-ja.com

TravisCIのBoostでの `std :: __ cxx11 :: basic_stringへの未定義の参照

GitHubでBoostを使用してTravisCIで正しくコンパイルするC+++プロジェクトを取得しようとしています。

最初にubuntuでパッケージとPPAを試しましたが、古すぎました(少なくともBoost 1.61が必要です)。

BoostをTravisCIでコンパイル(ダウンロード、コンパイル)した場合にのみ機能するようになりましたが、残念ながら、コンパイル時間は長く(11〜18分)、ログファイルは巨大です。

この問題を解決する方法を考えて、自分のマシンでBoostをコンパイルし、圧縮し、Webサーバーにアップロードし、対応するファイルを/ usr/local/[include/lib]にダウンロードしてコピーすることを考えました。

ここ は私のマシンで使用したコンパイラです。ブーストを使用してコンパイルしました

./bootstrap.sh --prefix=/home/andrei/boostabc
/usr/bin/time ./b2 install link=static

ここ はtravisファイル(およびリポジトリ)です。コメントでは、ブーストをコンパイルしてそれを行った方法です。

問題は、多くのエラーが発生することです。

/usr/local/lib/libboost_filesystem.a(operations.o): In function `(anonymous namespace)::dir_itr_first(void*&, void*&, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, boost::filesystem::file_status&, boost::filesystem::file_status&) [clone .isra.46] [clone .constprop.56]':
operations.cpp:(.text+0xa8): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

私はこれをグーグルで検索しました エラー そして私はいくつかのC++ 11ABIとマクロについての設定ミスがあるかもしれないことを発見しました。説明がよくわからず、どうやって動かすのかわからない。

これを解決する正しい方向に私を向けていただければ幸いです。

7
Andrei Damian

コンパイルに使用するコマンドラインに-D_GLIBCXX_USE_CXX11_ABI = 0を追加してみて、問題が解決するかどうかを確認する必要があります。

呼び出しているg ++/gccのいずれかがバージョン6でない可能性は十分にあると思います。そうでない場合、これはデフォルトでiircに1に設定されます。

これはここに記載されています

8
jheriko

リンカの結果によると、ISO C++はそれをサポートしていない可能性があります。g++ yourfiles.cc -std=c++11でコンパイルしてみてください。

0
Liu Shi