1

私はこのコンパイルの問題に何時間も苦労してきましたが、解決策を見つけることができませんでした:

「C with classes」スタイルで書かれ、cmake を使用する中規模のアプリケーションに取り組んでいます。std::multimap拡張している部分にを追加しようとしています。<map>対応するヘッダー ファイルにとを含め<utility>ました。このコードは私の最小限の例です。

std::pair<int,int> y(5,10);
cout << y.first << ", " << y.second << endl;

std::map<int,int> x;
//x.insert(y);
//x[2] = 4;
cout << x.empty() << endl;

コメント行のいずれかを有効にしない限り、これは期待どおりに機能します。有効にすると、リンカーから次のエラーが表示されます。

In function `std::_Rb_tree<int, std::pair<int const, int>, std::_Select1st<std::pair<int const, int> >, std::less<int>, std::allocator<std::pair<int const, int> > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair<int const, int> const&)':
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_tree.h:981: undefined reference to `std::_Rb_tree_insert_and_rebalance(int, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)'
collect2: error: ld returned 1 exit status

私が試したこと

  • 一部の調査では、これは libc++ と libstdc++ の関係にあると指摘されていましたが、私はそうではないと思いますinsert()。(私も違いがよくわかりません)
  • 上記のコードは、g++(オプションなし) またはgcc -lstdc++.
  • -lstdc++cmakeに追加しようとしましたCMAKE_CXX_FLAGSが、違いはないようです。
  • CMakeLists.txt で設定set(CMAKE_CXX_COMPILER "g++")しても違いはないようです。

ライブラリやプロジェクトのセットアップに関係があると思いますが、どこから始めればよいかアドバイスをいただければ幸いです。

4

0 に答える 0