私は、single.soファイルとしてユーザーに配布したいC ++ライブラリを構築してきました。うまくいけば、その.soファイルはほとんどの場合ディストロに依存しません。したがって、私はサードパーティのライブラリを静的にリンクしています(ただし、標準ライブラリに動的にリンクしています)
現在、CentOS 6.2(64ビット)のg ++で正常にビルドされますが、CentOS5.3でのビルドに問題があります。コンパイルは正常に実行されますが、リンカーエラーが発生します。
cpu_timer.cpp:(.text+0x288): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::basic_ostream<char, std::char_traits<char> >::_M_insert<long double>(long double)'
エラーを検索しましたが、標準ライブラリ自体のバージョン管理に問題があるようです。私のコード、またはむしろboost :: threadのコードは、CentOS5.3に含まれている標準ライブラリに存在しない新しいバージョンのコードを呼び出そうとしています。
理解できる。だから私はどちらかをする必要があります:
- C ++標準ライブラリに対して静的にリンクします(これについていくつかの調査を行いましたが、64ビットシステムでは非常に苦痛です。ほとんどの64ビットシステムに含まれているlibstdc ++。aは-fPICで構築されておらず、-fPICは実際には64ビットシステムで静的リンクを実行する必要があります。実際にlibstdc++。aを自分でビルドする必要があります。うーん...
- boost::timerをより互換性のあるバージョンに戻します。私は主にポータブルミューテックスに使用しているので、最先端のboost::thread機能は必要ありません。しかし、これには独自の問題があります。ブーストWebサイトのどこで、標準ライブラリへの依存関係(およびどのバージョン)を文書化していますか。彼らはそれをまったく文書化していますか?情報が見つからないようです。また、これは賢明な選択ですか?標準ライブラリが私にもたらす可能性のある他の厄介な驚きは何ですか?
私の目標(可能な限りディストリビューションにとらわれない)を考えると、どのルートをお勧めしますか?