Frage

Ich bin Kompilieren Bibliothek für ein privates Projekt, das auf einer Reihe von Bibliotheken abhängt. Speziell eine der Abhängigkeiten wird mit Fortran zusammengestellt. Auf einigen Fällen habe ich die Abhängigkeit mit g77 zusammengestellt gesehen, auf andere, die ich habe es mit gfortran zusammengestellt gesehen. Mein Projekt wird dann ./configure'd mit entweder -lg2c oder -lgfortran zu verbinden, aber so weit ich habe es von Hand zu tun.

Wenn es möglich ist, wie kann ich herausfinden, von der Suche in die abhängige Bibliothek (zB über nm oder ein anderes Dienstprogramm?), Ob der verwendete Compiler war g77 (und dann werde ich -lg2c in meinen Link-Optionen verwenden) oder gfortran (und dann werde ich -lgfortran)?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

nm filename | fgrep ' __g77'

werden die Ergebnisse geben, wenn g77 verwendet wurde, inzwischen

nm filename | fgrep '@@GFORTRAN'

werden die Ergebnisse geben, wenn gfortran verwendet wird.

Andere Tipps

Sie müssen sich für etwas, in der Ausgabe von nm filename grep, die ob wurde g77 oder gfortran anzeigt verwendet. In den meisten Fällen, wenn die Bibliothek tut zumindest Input-Output an einem Ort, wird es nennen libg2c oder libgfortran und Sie werden ein Symbol mit g77 drin, oder gfortran bemerken. Also, Ihre beste Wette ist grep zu verwenden:

nm filename | grep _g77_
nm filename | grep _gfortran_

Zwei Anmerkungen:

  1. greppen für @@GFORTRAN als geocar vorgeschlagen, ist nicht zuverlässig: es wird nur auf Plattformen arbeiten, in dem Bibliothek-Versionsverwaltung unterstützt wird, die umfasst z.B. Linux, aber nicht Windows oder Mac OS.
  2. Es ist immer noch möglich, dass einige kompilierten Code ruft absolut keine Unterstützung Bibliotheksfunktion (wenn alle es tut, ist einfache Arithmetik und hat nicht Input-Output, zum Beispiel). In diesem Fall, wenn es mit Debugging-Optionen kompiliert, dann ist es unmöglich, es der Compilerausgabe zu erzählen.

Möglicherweise können Sie es mithilfe nm, und zu sehen, um herauszufinden, ob die kompilierte Code-Funktionen aus dem einen oder anderen verwendet, aber das ist ganz ein Hack. können Sie in der Lage sein, es basiert auf, um herauszufinden, welche Bibliothek verfügbar ist (wenn kein libg2c vorhanden ist, dann war es nicht g77, zum Beispiel), aber dann haben Sie immer noch eine gewisse Unklarheit, wenn beide verfügbar sind. Wenn Sie die Abhängigkeit aufbauen können sich selbst, dann können Sie einen Teil Ihres Build-Prozess einen anderen Teil erzählen verwenden irgendwie (Variable, Datei, etc.), die von Ihnen verwendet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top