2 Stimmen

Welche Version von libstdc++.so.6 soll verwendet werden?

Ich verwende eine gemeinsam genutzte Bibliothek eines Drittanbieters (libsw_api.so) auf Solaris, die, wenn ich versuche zu laden, den folgenden Fehler erzeugt:

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

Wenn ich ldd für libsw_api.so ausführe, scheinen alle Referenzen erfüllt zu sein, insbesondere die C++-Standardbibliothek, die auf libstdc++.so.6.0.3 verweist:

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

Diese Bibliothek exportiert jedoch nicht _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

Was könnte das Problem sein? Falsche Version? Ich kenne mich mit C++ unter Unix nicht wirklich gut aus, daher wäre ich für jede Hilfe dankbar.

Könnte diese Diskrepanz zwischen SPARC32PLUS und SPARC die Ursache für das Problem sein?

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

Mein System:

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

2voto

vijay Punkte 21

Hallo, ich bin auch diese Dateien aktualisieren, bemerkte ich, dass ich die libstdc++.so.6.0.9 Datei, die mit der Verteilung kommt, anstatt die in /usr/sfw/lib/ verwenden sollte

1voto

Petesh Punkte 86615

Wenn Sie pvs auf dem libstdc++.so.6 Datei, so erhalten Sie eine Reihe von passenden Einträgen: GLIBCXX wenn Sie keinen passenden Eintrag haben GLIBCXX_3.4.9 dann ist das Symbol bad_alloc::what nicht in dieser Bibliothek ist, d.h. die Bibliothek ist älter als das abhängige Objekt libsw_api.so

Wenn dies der Fall ist, benötigen Sie wahrscheinlich eine neuere Version von libstdc++ - diese würde mit einer neueren Version von g++ geliefert werden

1voto

Steven Shih Punkte 644

Ich habe das gleiche Problem.

Die Ursache ist, dass wir den falschen LD_LIBRARY_PATH exportieren so dass unsere Shared Library mit der originalen gcc-Bibliothek (3.3) verknüpft wird, anstatt mit unserem Compiler (gcc 4.4).

Die Behebung des Linkerproblems sollte das Problem lösen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X