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!

È stato utile?

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:

  1. 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.
  2. È 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top