Come scoprire quale compilatore è stato usato: g77 o gfortran
Domanda
Sto compilando una libreria per un progetto privato, che dipende da un numero di librerie. In particolare una delle dipendenze viene compilata con Fortran. In alcuni casi, ho visto la dipendenza compilata con g77
, in altri l'ho vista compilata con gfortran
. Il mio progetto quindi è ./configure
'd per collegarsi con -lg2c
o -lgfortran
, ma finora lo sto facendo mano.
Se è possibile, come posso scoprire, guardando nella libreria dipendente (tramite ad esempio nm
o qualche altra utility?), se il compilatore utilizzato era g77
(e quindi userò -lg2c
nelle mie opzioni di collegamento) o gfortran
(e poi userò -lgfortran
)?
Grazie in anticipo!
Soluzione
nm filename | fgrep ' __g77'
darà risultati se nel frattempo è stato utilizzato g77
nm filename | fgrep '@@GFORTRAN'
darà risultati se si usa gfortran.
Altri suggerimenti
Devi fare grep per qualcosa, nell'output di nm nomefile
, che indica se sono stati usati g77 o gfortran. Nella maggior parte dei casi, se la libreria fa almeno input-output in un posto, chiamerà libg2c o libgfortran e noterai un simbolo con g77
o < code> gfortran . Quindi, la soluzione migliore è usare grep:
nm filename | grep _g77_
nm filename | grep _gfortran_
Due note:
- Grepping per
@@ GFORTRAN
come suggerito da geocar non è affidabile: funzionerà solo su piattaforme in cui è supportato il versioning della libreria, che include ad es. Linux ma non Windows o Mac OS. - È ancora possibile che alcuni codici compilati non chiamino assolutamente nessuna funzione di libreria di supporto (se tutto ciò che fa è una semplice aritmetica e non ha input-output, ad es.). In tal caso, a meno che non sia compilato con le opzioni di debug, è impossibile dire quale compilatore lo abbia generato.
Potresti riuscire a capirlo usando nm e vedere se il codice compilato utilizza le funzioni dell'uno o dell'altro, ma è piuttosto un hack. Potresti riuscire a capirlo in base alla libreria disponibile (se non è disponibile libg2c, ad esempio non era g77), ma hai ancora qualche ambiguità se entrambi sono disponibili. Se puoi creare tu stesso la dipendenza, allora puoi usare una parte del tuo processo di compilazione in qualche modo dire a un'altra parte (variabile, file, ecc.) Quale hai usato.