1

私は 64 ビット Linux システムで作業しており、バイナリがあるサードパーティ ライブラリに依存するコードをビルドしようとしています。リンク中に、ライブラリの 1 つに対して一連の未定義の参照エラーが発生しました。これは、リンカーが標準 C++ 関数/クラスへの参照を解決できなかったことを示しています。

librxio.a(EphReader.o): In function `gpstk::EphReader::read_fic_data(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
EphReader.cpp:(.text+0x27c): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)'
EphReader.cpp:(.text+0x4e8): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)'

私は実際には C++ プログラマーではありませんが、標準ライブラリが見つからないように見えます。さらに調査を行った結果、標準ライブラリに対する librxio の依存関係を調べたところ、次の結果が得られました。

$ ldd librxio.so.16.0
./librxio.so.16.0: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./librxio.so.16.0)
   libm.so.6 => /lib64/libm.so.6 (0x00002aaaaad45000)
   libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002aaaaafc8000)
   libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002aaaab2c8000)
   libc.so.6 => /lib64/libc.so.6 (0x00002aaaab4d7000)
   /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)

そのため、librxio (サードパーティ ライブラリの 1 つ) には少なくとも v3.4.9 の標準ライブラリが必要であると読んでいます。しかし、私がインストールしたバージョンは 4.1.2 です。

$ rpm -qa | grep libstdc
compat-libstdc++-33-3.2.3-61.x86_64
libstdc++-devel-4.1.2-14.el5.i386
libstdc++-devel-4.1.2-14.el5.x86_64
libstdc++-4.1.2-14.el5.x86_64
libstdc++-4.1.2-14.el5.i386

これはうまくいかないのですか?共有オブジェクトのメジャー番号は v3.4.9 と同じ 6 です。このレベルでは、これは下位互換性があるべきではありませんか? サードパーティのライブラリが、私がインストールしたものよりも古いバージョンの標準ライブラリを探しているようです。しかし、共有ライブラリの同じメジャー番号を持つバージョン間の下位互換性はありませんか? 繰り返しますが、私は実際には C++ プログラマーではありません。しかし、私は問題が何であるかわかりません。

アドバイスをいただければ幸いです。ありがとう。

4

2 に答える 2

6

C++ ランタイムはコンパイラ固有である傾向があり、探しているライブラリは間違いなくコンパイラ バージョン固有です。インターフェイスが変わらなくても、内部が変わる可能性があることに注意してください。

お持ちのコンパイラとライブラリの同じバージョンでビルドされたライブラリを取得するか、適切なコンパイラ/ライブラリ バージョンをインストールする必要があります。

于 2010-03-15T17:53:11.337 に答える
1

どこで手に入れましたlibrxio.so.16.0か?GCC > 4.1 でコンパイルされていると思うので、4.1 ランタイムでは動作しない可能性があります。

于 2010-03-15T17:53:21.837 に答える