Ich versuche, ein einfaches C ++ - Programm auf einer AIX-Box zu schreiben. Das Programm ist unten angegeben:
%Vor%Mein LDFLAGS ist wie folgt eingestellt:
%Vor%CFLAGS ist:
%Vor%Das Programm kompiliert gut. Aber wenn ich versuche, dasselbe zu tun, kommt das Programm mit einem Segmentierungsfehler heraus. Ich lief das gleiche mit gdb und fand das folgende Problem, wenn ich Ofstream verwende:
%Vor%Irgendeine Idee, warum das passiert? Jede Hilfe wird geschätzt :)
Hinweis: fstream selbst funktioniert ...
Es ist eine Weile her, aber aus meinem Kopf: müssen Sie nicht -pthread
zu den Kompilier- / Verknüpfungsoptionen hinzufügen?
Ich begegne dem gleichen Fehler. Die wichtigsten Punkte, um den Fehler zu reproduzieren sind: 1 benutze std :: stream (wie zB std :: ofstream) in der share libary; 2 Verwenden Sie Pthread-Funktion (z. B. Pthread_self) in Share-Bibliothek; 3 Verwenden Sie "-O2", um den Code zu optimieren. Dann wird "Segmentierungsfehler (Core Dumped)" angezeigt.
AIX stellt zwei Versionen (64bit) von libstdc ++ zur Verfügung. (Siehe Ссылка )
64-Bit-Kompilierung, nicht Thread-sicher (<prefix>/ppc64
)
64-Bit-Kompilierung, Thread-sicher (<prefix>/pthread/ppc64)
Meine Lösung ist:
Ändere LIBPATH, um "<prefix>/pthread/ppc64"
version zu verwenden.
Setzen Sie beispielsweise LIBPATH auf "/opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.6.1/pthread/ppc64/"
Es funktioniert gut in meiner Maschine.
Ich habe das Problem analysiert und eine Lösung gefunden.
Hier ist, was ich getan habe:
Ich habe eine ldd auf meiner testprog ausführbaren Datei gemacht:
%Vor%Ich habe festgestellt, dass phthreads libstdc verwendet wurde. Dies lag daran, dass mein LIBPATH diesen Pfad vor / usr
hatteAls nächstes setze ich meinen LIBPATH zurück, um alle Pfade auszuschließen, in denen pthreads gcc verwendet wurde, und stelle sicher, dass die anderen verwendeten gcc-Bibliotheken in LIBPATH
verfügbar sindSchließlich habe ich das Testprogramm mit diesem neuen LIBPATH
kompiliertHinweis: LD_LIBRARY_PATH wird von Linux verwendet und LIBPATH wird von AIX verwendet.
Prost!