在mac上编译来自fortran的'静态'二进制文件

时间:2009-10-08 18:36:41

标签: macos static compilation shared-libraries fortran

我想在mac上编译fortran代码,使其不依赖于任何共享库。最终,我希望能够将二进制文件发送给其他人并使其正常工作(前提是处理器具有正确的架构)。我注意到g95和ifort有一个-static标志,这在mac上不起作用。

如果我考虑以下计划:

program test
  print *,'hello world'
end program test

并使用

进行编译
ifort -static-libgcc -static-intel test.f90

生成的二进制文件仍取决于几个共享库:

valinor:tmp tom$ otool -L a.out 
a.out:
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 103.0.0)
    /usr/lib/libmx.A.dylib (compatibility version 1.0.0, current version 315.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 124.1.1)

那么有没有办法正确编译fortran代码,使其不依赖于mac上的任何共享库?

2 个答案:

答案 0 :(得分:2)

静态库在Mac OS X上很难设计。

有关Mac OS X上静态二进制文件的详细信息,请参阅this post

理论上,您可以自己构建静态库并链接它们。您必须从Darwin获取C运行时库并静态编译它,libgcc等。它会起作用,但可能涉及一些工作。

答案 1 :(得分:1)

简短的回答是:您实际上并不想要在Mac OS X上进行完全静态链接。在某些特定于产品的库的静态版本中进行链接是公平和良好的,但系统共享库就是这样:您的共享库在任何Mac上都能找到,并保证与Apple的兼容性。

PS:您可以通过在命令行上实际指定-static-libgcc来摆脱libgcc_s。不值得做任何事情,但是......