2017-02-28 4 views
-1

Wie bereits erwähnt über here und hereLaufzeit Verknüpfung mit mit GCC

Also, wenn Ihr Programm mathematische Funktionen und einschließlich math.h, dann Sie explizit müssen, um die Mathematik-Bibliothek verknüpfen, indem die ‚- lm 'flag

Aber ich schaffe es einfach, die Verknüpfung ohne Verwendung von -lm Flagge mit gcc auf meinem gutartigen C-Code zu bekommen.

und es funktioniert einwandfrei.

Irgendwelche Hinweise.

gcc -Ausführung

gcc -v 
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 
Apple LLVM version 8.0.0 (clang-800.0.42.1) 
Target: x86_64-apple-darwin16.4.0 
Thread model: posix 
InstalledDir: /Library/Developer/CommandLineTools/usr/bin 
+1

Lassen Sie mich das klarstellen, etwas funktioniert * und Sie haben eine Beschwerde? :-) – paxdiablo

+0

@paxdiablo :) Ich möchte nur wissen, ob es funktioniert über die gesamte Maschine oder die spezifische Version von gcc auf MacOS, die das tut – Noobie

+0

FWIW, ich denke, es ist anachronistisches Verhalten seitens gcc in dem mathematischen Code ist in einer Bibliothek getrennt von den anderen libc-Sachen. Aber aus dem Speicher hat gcc/ld einige ziemlich mächtige Konfigurationsdateien, die diese Art von Dingen kontrollieren, also ist es möglich, dass Apple (oder BSD) es gerade repariert hat. Ich würde mich nicht darauf verlassen, dass es überall funktioniert. – paxdiablo

Antwort

2

Auf vielen Systemen einige Teile von dem, was traditionell ist in libm sind in der Standard-C-Bibliothek aus verschiedenen Gründen enthalten. Andere Teile können direkt in den math.h-Header implementiert werden, andere wiederum können nur vom Compiler inline implementiert werden.

Egal welchen Code Sie hatten, Sie kamen nicht mit libm. Sie landen oft in Situationen, in denen Sie etwas tun, obwohl es nicht vollkommen korrekt ist. Eine gute Angewohnheit besteht darin, dieses Glück zu ignorieren und dennoch das zu tun, was die Standards/Dokumentation sagt, weil es die Anzahl der Probleme in der Zukunft reduziert.