Pergunta

Estou compilando biblioteca para um projecto privado, que depende de um número de bibliotecas. Especificamente uma das dependências é compilada com Fortran. Em alguns casos, eu vi a dependência compilado com g77, em outros eu já vi isso compilado com gfortran. Meu projeto é então ./configure'd a ligação com qualquer -lg2c ou -lgfortran, mas até agora eu venho fazendo isso com a mão.

Se for possível, como posso descobrir, de olhar para a biblioteca dependente (nm via por exemplo, ou algum outro utilitário?), Se o compilador utilizado foi g77 (e então eu vou usar -lg2c em minhas opções de link) ou gfortran (e então eu vou usar -lgfortran)?

Agradecemos antecipadamente!

Foi útil?

Solução

nm filename | fgrep ' __g77'

dará resultados se foi usado g77, entretanto

nm filename | fgrep '@@GFORTRAN'

dará resultados se gfortran é usado.

Outras dicas

Você precisa grep para alguma coisa, na saída do nm filename, que indica se g77 ou gfortran foi usado. Na maioria dos casos, se a biblioteca faz pelo menos input-output em um lugar, ele irá chamar libg2c ou libgfortran e você vai notar um símbolo com g77 na mesma, ou gfortran. Então, sua melhor aposta é usar grep:

nm filename | grep _g77_
nm filename | grep _gfortran_

Duas notas:

  1. grepping para @@GFORTRAN como geocar sugeriu não é confiável: ele vai funcionar apenas em plataformas onde biblioteca de versionamento é suportado, o que inclui, por exemplo, linux, mas não o Windows ou Mac OS.
  2. É ainda possível que algumas chamadas de código compilado absolutamente nenhuma função biblioteca de suporte (se tudo que faz é aritmética simples e não tem entrada-saída, por exemplo). Nesse caso, a menos que seja compilado com opções de depuração, é impossível dizer qual a saída que compilador.

Você pode ser capaz de descobrir isso usando nm, e ver se as usa código compilado funções de um ou outro, mas isso é um hack. Você pode ser capaz de descobrir isso com base no qual biblioteca está disponível (se não houver libg2c disponível, então não era g77, por exemplo), mas então você ainda tem alguma ambigüidade se ambos estiverem disponíveis. Se você pode construir a dependência si mesmo, então você pode usar tem uma parte de seu processo de construção contar outra parte de alguma forma (variável, arquivo, etc.) que que você usou.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top