Programm verknüpfen schlägt fehl, wenn benutzerdefinierte erstellten gcc
Bin ich mit einem fedora-21-Verteilung, in der die Standard-gcc 4.9.
Ich habe ein custom built gcc/g++ - 4.8 in /usr/local/gcc48 (beispielsweise cuda benötigt gcc =< 4.8, und ich verwenden Sie update-alternatives für dieses eine)
Ich habe das kompilieren ein paar kleine Programme mit dieser version 4.8 ohne problem so weit.
Nun, ich habe einen source-code, der verwendet von vtk Bibliotheken und andere. Wenn ich mit Standard-gcc 4.9, cmake und machen die Arbeit fein.
Jedoch, wenn Sie gcc48, bekomme ich:
/usr/lib64/vtk/libvtkCommonDataModel.so.1: référence indéfinie vers « std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20 »
/lib64/libicuuc.so.52: référence indéfinie vers « __cxa_throw_bad_array_new_length@CXXABI_1.3.8 »
collect2: erreur: ld a retourné 1 code d'état d'exécution
CMakeFiles/main.dir/build.make:365: recipe for target '../bin/main' failed
make[2]: *** [../bin/main] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/main.dir/all' failed
make[1]: *** [CMakeFiles/main.dir/all] Error 2
Makefile:76: recipe for target 'all' failed
make: *** [all] Error 2
Ich verstehen, dass es einen linker-Fehler habe ich versucht zu zeigen LD_LIBRARY_PATH=/usr/local/gcc48/lib oder LD_LIBRARY_PATH=/usr/local/gcc48/lib64, aber ich bin stecken.
Was ist hier das problem ?
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
__cxa_throw_bad_array_new_length
wurde Hinzugefügt, in GCC 4.9. Das ist es, was die @CXXABI_1.3.8 version suffix bedeutet. Sie können sich diese version codes hier:https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html
Dieser Fehler bedeutet, dass Sie versuchen, eine Verknüpfung mit einem Objekt-Datei
/usr/lib64/vtk/libvtkCommonDataModel.so.1
kompiliert mit GCC-4.9 oder höher mitlibstdc++.so
oderlibsupc++.so
von GCC-4.8 oder früher. Entweder neu erstellenlibvtkCommonDataModel.so
mit GCC 4.8, oder link gegen die richtige libstdc++.so.Edit:
Eigentlich, wenn Sie kompilieren wollen, mit einer neueren version von GCC, sondern laufen mit einer älteren libstdc++.so, die getan werden kann.
Kompilieren mit
-D_GLIBCXX_USE_CXX11_ABI=0
wenn Sie wollen, zu kompilieren mit GCC 5+ und lassen sich mit libstdc++.also von älteren GCC. Sehen https://bugzilla.mozilla.org/show_bug.cgi?id=1153109 und Mit dual-ABI in die libstdc++ - Handbuch.Link gegen stdc++compat.cpp mit back-compat hacks von Mozilla. Sie können auch nehmen einen Blick auf meine modifizierte version, die nicht abhängig Mozilla Header, aber es ist etwas veraltet.
Insbesondere definiert ein stub
__cxa_throw_bad_array_new_length
.Wäre es hilfreich, wenn du postest die Fehlermeldung in Englisch.
Scheint es, dass die undefined symbol ist
__cxa_throw_bad_array_new_length
. Die Funktionen__cxa
... komme aus der C++ - runtime-library. G++ üblicherweise mit seiner eigenen version dieser Bibliothek, genanntlibsupc++
. Ich würde vermuten, dass die custom-built-G++ nicht finden können, diese Bibliothek, oder gibt einen Verweis auf ein symbol, das nicht in den neueren (4.9)libsupc++
. Versuchen Sie kompilieren dielibsupc++
Quelle, die Schiffe mit Ihrer benutzerdefinierten version von G++ und die Leitung der linker Richtung. Möglicherweise müssen Sie auch, dies zu tun fürlibstdc++
.