Verwendung von ofstream unter AIX

8

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 ...

    
Ricketyship 19.01.2012, 10:22
quelle

3 Antworten

0

Es ist eine Weile her, aber aus meinem Kopf: müssen Sie nicht -pthread zu den Kompilier- / Verknüpfungsoptionen hinzufügen?

    
Christian.K 20.01.2012, 07:21
quelle
1

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.

    
Dong Wang 07.06.2013 10:09
quelle
0

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

hatte

Als 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 sind

Schließlich habe ich das Testprogramm mit diesem neuen LIBPATH

kompiliert
  

Hinweis: LD_LIBRARY_PATH wird von Linux verwendet und LIBPATH wird von AIX verwendet.

Prost!

    
Ricketyship 20.01.2012 07:15
quelle

Tags und Links