我有一个我想分发的Fortran程序,所以我想在gfortran库中静态链接.
如果我使用以下标志编译程序:
gfortran -o myprog -static-libgfortran -static-libgcc myprog.f
Run Code Online (Sandbox Code Playgroud)
otool告诉我它在大多数gofrtran库中是静态链接的,但不是libquadmath:
otool -L myprog
/usr/local/gfortran/lib/libquadmath.0.dylib (compatibility version 1.0.0, current v
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
Run Code Online (Sandbox Code Playgroud)
有一个静态的libquadmath库/usr/local/gfortran/lib/libquadmath.a,但是我尝试的每个链接行总是以完整的静态链接(OSX不支持)或libquadmath的动态链接结束.
我已经设法通过从/ usr/local/gfortran/lib /中删除libquadmath.0.dylib和libquadmath.dylib来创建我想要的东西,然后链接器拉入静态库.
然而,至少可以说这看起来有点笨拙.
任何人都可以建议一个更优雅的方式吗?
谢谢!
我知道这是一个非常古老的跟踪器,但也许有人仍然会对有效的解决方案感兴趣。
假设我们有代码:
! fort_sample.f90
program main
write (*,*) 'Hello'
stop
end
Run Code Online (Sandbox Code Playgroud)
首先,编译这些东西:
gfortran -c -o fort_sample.o fort_sample.f90
Run Code Online (Sandbox Code Playgroud)
然后,链接东西
ld -o ./fort_sample -no_compact_unwind \
-arch x86_64 -macosx_version_min 10.12.0 \
-lSystem \
/usr/local/gfortran/lib/libgfortran.a \
/usr/local/gfortran/lib/libquadmath.a \
/usr/local/gfortran/lib/gcc/x86_64-apple-darwin16/6.3.0/libgcc.a \
fort_sample.o
Run Code Online (Sandbox Code Playgroud)
你可以执行它
./fort_sample
Hello
Run Code Online (Sandbox Code Playgroud)
你会注意到 quadmath 不再存在
> otool -L fort_sample
fort_sample:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.51.1)
Run Code Online (Sandbox Code Playgroud)
我想这就是你首先要寻找的。没有删除 dylib,没有符号链接等。
| 归档时间: |
|
| 查看次数: |
2157 次 |
| 最近记录: |