Ich versuche derzeit, Oracle Linux 6 OS auf einem SPARC S7-Server zu verwenden, um die NPB-Benchmarks (mit OpenMP-Multithreading-Unterstützung) auszuführen. Das Betriebssystem wird mit gcc 4.4.7
vorinstalliert, die Niagara 7-Optimierungen fehlen. Ich habe devtoolset-3
vom Oracle Yum Repository heruntergeladen, das gcc 4.9.2
in /opt/rh/devtoolset-3/root/usr/bin
installiert hat. Wenn ich jedoch den NPB-Benchmark mit dem neueren gcc kompiliere, wird automatisch eine Verknüpfung zu Bibliotheken hergestellt, die dem älteren gcc 4.4.7
(in /usr/lib
) zugeordnet sind. Dies führte dazu, dass mein Programm während der Ausführung segfault wurde. Ich glaube, das liegt daran, libgomp 4.4.7
ist nicht kompatibel mit libgomp 4.9.2
. Ich habe versucht, verschiedene Wege zu den Bibliotheken in der gcc 4.9.2-Ordner (das ist /opt/rh/devtoolset-3/root/usr/lib/gcc
); keine der Methoden arbeiten:Wie verknüpfe ich Bibliotheken von mehreren Standorten (entsprechend mehreren GCC-Versionen)?
-Xlinker -rpath=lib_location
-Wl -Bstatic
-L lib_location
Der nächstgelegene ich bekam, als -Wl -Bstatic ~/libgomp.a
oder -static -L ~/libgomp.a
verwenden. Es findet keine Bibliotheken wie libm
, die sich im Standardverzeichnis gcc lib (usr/lib
) befinden.
Der eigentliche Befehl zur Verbindung verwendet wird:
/opt/rh/devtoolset-3/root/usr/bin/gcc -O3 -fopenmp -mcmodel=medmid -static -L/opt/rh/devtoolset-3/root/usr/lib/gcc/sparc64-redhat-linux/4.9.2 -o ../bin/bt.W.x bt.o initialize.o exact_solution.o exact_rhs.o set_constants.o adi.o rhs.o x_solve.o y_solve.o solve_subs.o z_solve.o add.o error.o verify.o ../common/print_results.o ../common/c_timers.o ../common/wtime.o -lm -L/opt/rh/devtoolset-3/root/usr/lib/gcc/sparc64-redhat-linux/4.9.2/lib/
/opt/rh/devtoolset-3/root/usr/libexec/gcc/sparc64-redhat-linux/4.9.2/ld: cannot find -lm
/opt/rh/devtoolset-3/root/usr/libexec/gcc/sparc64-redhat-linux/4.9.2/ld: cannot find -lrt
/opt/rh/devtoolset-3/root/usr/libexec/gcc/sparc64-redhat-linux/4.9.2/ld: cannot find -lpthread
/opt/rh/devtoolset-3/root/usr/libexec/gcc/sparc64-redhat-linux/4.9.2/ld: cannot find -lc
Gibt es eine Möglichkeit ich nur die libgomp
Bibliothek von gcc 4.9.2
verknüpfen kann, während die übrigen Bibliotheken von gcc 4.4.7
verknüpfen?
Normalerweise würden Sie PATH setzen, um das gewünschte Verzeichnis mit gcc vor dem System eins und LD_LIBRARY_PATH mit dem entsprechenden/lib64/zu versehen (unter der Annahme von 64 bit gcc). – tim18
Können Sie es ausarbeiten? Ich habe jedoch versucht, LD_LIBRARY_PATH zu exportieren und '/ opt/rh/devtoolset-3/root/usr/lib /' zum Pfad hinzuzufügen, aber dies ändert nicht die Verwendung von Bibliotheken durch Linker. Es verwendet immer noch Standardbibliotheken, die bei der Ausführung des resultierenden Programms einen Fehler verursachen. –