Wenn mein Code für OpenMP die Funktionen in seiner API verwendet (z. B. omp_get_thread_num()), ohne seine Direktiven (z. B. #pragma omp …) zu verwenden,
warum die direkte Angabe von libgomp.a zu gcc anstelle von -fopenmp nicht funktioniert, wie z
Aktualisieren: Ich habe gerade festgestellt, dass das Verlinken auf libgomp.a nicht funktioniert, aber das Verlinken auf libgomp.so funktioniert. Bedeutet das, dass OpenMP nicht statisch gelinkt werden kann?
Warum -fopenmp nur ohne Angabe der Bibliotheksdateien funktioniert
gcc hello.c -fopenmp -o hello
Aktualisieren: Mit anderen Worten, warum ist bei Verwendung von -fopenmp keine explizite Verknüpfung mit libgomp.so erforderlich?
Werden OpenMP-Anweisungen im Code ignoriert, falls vorhanden?
Danke und Grüße!
Aus der GCC-Dokumentation: Das Flag -fopenmp sorgt auch für die automatische Verknüpfung der OpenMP-Laufzeitbibliothek. Siehe hier: gcc.gnu.org/onlinedocs/libgomp/…
– Benutzer1436916
26. Mai 2013 um 15:17 Uhr
Chris Friedrich
Denken Sie im Allgemeinen daran, dass die Direktiven und die Funktionen verschiedene Dinge sind; Erstere werden von kontrolliert -fopenmp und letztere werden durch die Verknüpfung mit der OpenMP-Bibliothek gesteuert.
(Aktualisiert, um Kommentare einzufügen) Versuchen Sie es mit der -fopenmp und -static Optionen zum statischen Linken von OpenMP. Denn dies impliziert -lgomp -lrtwird der folgende Befehl nicht korrekt kompiliert, es sei denn, Sie geben auch den Speicherort von an librt.a.
(Aktualisiert, um Kommentare einzufügen) Ich stelle mir vor, dass der folgende Befehl korrekt kompiliert wird, da sich die OpenMP-Bibliothek bereits in Ihrem Bibliothekspfad befindet und der dynamische Linker Ihres Systems automatisch verknüpft libgomp.so.
gcc hello.c -fopenmp -o hello
Der folgende Befehl wird wahrscheinlich ordnungsgemäß kompiliert, da er mit dem gemeinsam genutzten Objekt für OpenMP (libgomp.so). Notiere dass der -static Option ist nicht Gebraucht.
Wenn Sie die nicht angeben -fopenmp Option sollten OpenMP-Anweisungen ignoriert werden.
Vielen Dank! Ich betrachte den Code mit API und ohne Anweisungen. (1) Ich habe gerade festgestellt, dass das Verlinken auf libgomp.a nicht funktioniert, aber das Verlinken auf libgomp.so funktioniert. Bedeutet das, dass OpenMP nicht statisch gelinkt werden kann? (2) Warum ist bei Verwendung von -fopenmp keine explizite Verknüpfung mit libgomp.so erforderlich?
– Tim
15. Juni 2011 um 17:16 Uhr
(1) Sie können OpenMP statisch mit “-fopenmp -static” verknüpfen. Sie werden feststellen, dass, wenn dies angegeben ist, “-lgomp -lrt” verwendet wird. (2) Wenn das System den dynamischen Linker unterstützt, wird er verwendet, und wenn Sie -fopenmp angeben, wird er mit libgomp.so verknüpft.
– ejd
15. Juni 2011 um 19:33 Uhr
Es scheint, dass sowohl der Compiler als auch der Linker die -fopenmp Flagge.
– Royi
21. Februar 2018 um 0:34 Uhr
@ejd Hallo, ich würde gerne wissen, wie Leute “-fopenmp -static”-Links zu openmp- und rt-Bibliotheken kennen können. Ich tue man gcc und suchen -fopenmp -static aber kein Ergebnis gefunden, und suchen -fopenmp Ergebnis nicht erhalten rt Bibliothek.
– ChrisZZ
13. Januar um 15:08 Uhr
13733600cookie-checkGeben Sie OpenMP für GCC anyes
Aus der GCC-Dokumentation: Das Flag -fopenmp sorgt auch für die automatische Verknüpfung der OpenMP-Laufzeitbibliothek. Siehe hier: gcc.gnu.org/onlinedocs/libgomp/…
– Benutzer1436916
26. Mai 2013 um 15:17 Uhr