2

Solaris でサードパーティの共有ライブラリ (libsw_api.so) を使用していますが、ロードしようとすると次のエラーが発生します。

fatal: relocation error: file libsw_api.so:
symbol _ZNKSt9bad_alloc4whatEv: referenced symbol not found
The program exited with error code 1

libsw_api.so で ldd を実行すると、すべての参照、特に libstdc++.so.6.0.3 を指す C++ 標準ライブラリが満たされているように見えます。

glispa02(fostopr)$ ldd libsw_api.so
...
libstdc++.so.6 =>        /usr/sfw/lib/libstdc++.so.6
...
glispa02(fostopr)$ ls -l /usr/sfw/lib/libstdc++.so.6
lrwxrwxrwx   1 root     root          18 Jun 21  2010 /usr/sfw/lib/libstdc++.so.6 -> libstdc++.so.6.0.3

ただし、そのライブラリは _ZNKSt9bad_alloc4whatEv をエクスポートしません。

glispa02(fostopr)$ nm /usr/sfw/lib/libstdc++.so.6 | grep bad_alloc                          
[7592]  |    752340|      64|FUNC |GLOB |0    |2653   |_ZNSt9bad_allocD0Ev
[7324]  |    752284|      56|FUNC |GLOB |0    |2652   |_ZNSt9bad_allocD1Ev
[8077]  |    752228|      56|FUNC |GLOB |0    |2651   |_ZNSt9bad_allocD2Ev
[7519]  |    356736|      76|FUNC |GLOB |0    |473    |_ZSt17__throw_bad_allocv
[7341]  |    983588|      12|OBJT |WEAK |0    |3842   |_ZTISt9bad_alloc
[6569]  |    777008|      13|OBJT |WEAK |0    |3317   |_ZTSSt9bad_alloc
[7299]  |    983568|      20|OBJT |WEAK |0    |3841   |_ZTVSt9bad_alloc

何が問題なのですか?間違ったバージョン?Unix での C++ はあまり得意ではないので、助けていただければ幸いです。

この SPARC32PLUS と SPARC の不一致が問題の原因でしょうか?

glispa02(fostopr)$ file libsw_api.so        
libsw_api.so:   ELF 32-bit MSB dynamic lib SPARC32PLUS Version 1, V8+ Required,    dynamically linked, not stripped
glispa02(fostopr)$ file /usr/sfw/lib/libstdc++.so.6.0.3 
/usr/sfw/lib/libstdc++.so.6.0.3:        ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped, no debugging information available

私のシステム:

glispa02(fostopr)$ cat /etc/release                    
                  Solaris 10 10/09 s10s_u8wos_08a SPARC
       Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
                    Use is subject to license terms.
                       Assembled 16 September 2009
glispa02(fostopr)$ uname -a
SunOS glispa02 5.10 Generic_141444-09 sun4u sparc SUNW,SPARC-Enterprise
4

3 に答える 3

2

こんにちは、これらのファイルもアップグレードしています。/usr/sfw/lib/ にあるファイルではなく、ディストリビューションに付属している libstdc++.so.6.0.9 ファイルを使用する必要があることに気付きました。

于 2011-11-11T17:24:11.600 に答える
1

同じ問題が発生します。

原因は、共有ライブラリがコンパイラ (gcc 4.4) ではなく元の gcc のライブラリ (3.3) にリンクするように、間違った LD_LIBRARY_PATH をエクスポートすることです。

リンカーの問題を修正すると、問題が解決するはずです

于 2015-12-04T09:36:46.740 に答える
1

ファイルでpvs を使用するlibstdc++.so.6と、一致するエントリの束が得られます:GLIBCXXに一致するエントリがない場合GLIBCXX_3.4.9、シンボルbad_alloc::whatはそのライブラリにありません。つまり、ライブラリは依存オブジェクトよりも古いですlibsw_api.so

この場合、おそらく新しいバージョンの libstdc++ が必要です。新しいバージョンの g++ が付属しています。

于 2011-09-28T10:15:00.580 に答える