我想在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上的任何共享库?
答案 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。不值得做任何事情,但是......