gfortran-5.2.0 -m32 -dynamiclib -o -shared 产生奇怪的文件
gfortran-5.2.0 -m32 -dynamiclib -o -shared produces bizarre files
我在 tmp0.f
中有一个小的 Fortran 代码
subroutine POWERTWO (n, nsquared)
integer, intent(in) :: n
integer, intent(out) :: nsquared
nsquared = n*n
return
end subroutine POWERTWO
我用 :
编译成一个动态库
gfortran-5.2.0 -m32 -dynamiclib ./tmp0.f -o ./tmp0.so -shared
我的 gfortran
是使用 gcc 5.2.0 构建的,配置如下:
Using built-in specs.
COLLECT_GCC=gfortran-5.2.0
COLLECT_LTO_WRAPPER=/usr/local/lvm/gcc-5.2.0/libexec/gcc/x86_64-unknown-linux-gnu/5.2.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --prefix=/usr/local/lvm/gcc-5.2.0 --enable-checking=release --with-gmp=/usr/local/lvm/gmp-6.0.0 --with-mpfr=/usr/local/lvm/mpfr-3.1.2 --with-mpc=/usr/local/lvm/mpc-1.0.3 --enable-languages=c,c++,fortran,objc,obj-c++ --with-isl=/usr/local/lvm/isl-0.14 --with-cloog=/usr/local/lvm/cloog-0.18.4 --program-suffix=-5.2.0
Thread model: posix
gcc version 5.2.0 (GCC)
在 OS X 10.10.5 下,编译生成(没有警告)所需的动态库 tmp0.dylib,但在 ubuntu (15-05) 下,我收到以下警告:
f951: Warning: unrecognized gcc debugging option: y
f951: Warning: unrecognized gcc debugging option: n
f951: Warning: unrecognized gcc debugging option: m
f951: Warning: unrecognized gcc debugging option: i
f951: Warning: unrecognized gcc debugging option: c
f951: Warning: unrecognized gcc debugging option: l
f951: Warning: unrecognized gcc debugging option: i
f951: Warning: unrecognized gcc debugging option: b
和编译产生的,除了动态库tmp0.so,一堆文件:
-rw-rw-r-- 1 XXX XXX 4679 août 25 19:12 tmp0.f.192r.expand
-rw-rw-r-- 1 XXX XXX 1601 août 25 19:12 tmp0.f.193r.vregs
-rw-rw-r-- 1 XXX XXX 1602 août 25 19:12 tmp0.f.194r.into_cfglayout
-rw-rw-r-- 1 XXX XXX 3398 août 25 19:12 tmp0.f.195r.jump
-rw-rw-r-- 1 XXX XXX 1570 août 25 19:12 tmp0.f.207r.reginfo
-rw-rw-r-- 1 XXX XXX 1634 août 25 19:12 tmp0.f.225r.outof_cfglayout
-rw-rw-r-- 1 XXX XXX 1601 août 25 19:12 tmp0.f.226r.split1
-rw-rw-r-- 1 XXX XXX 2980 août 25 19:12 tmp0.f.228r.dfinit
-rw-rw-r-- 1 XXX XXX 3062 août 25 19:12 tmp0.f.229r.mode_sw
-rw-rw-r-- 1 XXX XXX 2980 août 25 19:12 tmp0.f.230r.asmcons
-rw-rw-r-- 1 XXX XXX 6631 août 25 19:12 tmp0.f.234r.ira
-rw-rw-r-- 1 XXX XXX 5581 août 25 19:12 tmp0.f.235r.reload
-rw-rw-r-- 1 XXX XXX 3299 août 25 19:12 tmp0.f.238r.split2
-rw-rw-r-- 1 XXX XXX 4347 août 25 19:12 tmp0.f.242r.pro_and_epilogue
-rw-rw-r-- 1 XXX XXX 3957 août 25 19:12 tmp0.f.245r.jump2
-rw-rw-r-- 1 XXX XXX 4007 août 25 19:12 tmp0.f.258r.stack
-rw-rw-r-- 1 XXX XXX 3925 août 25 19:12 tmp0.f.259r.alignments
-rw-rw-r-- 1 XXX XXX 3513 août 25 19:12 tmp0.f.261r.mach
-rw-rw-r-- 1 XXX XXX 3513 août 25 19:12 tmp0.f.262r.barriers
-rw-rw-r-- 1 XXX XXX 3578 août 25 19:12 tmp0.f.266r.shorten
-rw-rw-r-- 1 XXX XXX 3578 août 25 19:12 tmp0.f.267r.nothrow
-rw-rw-r-- 1 XXX XXX 4216 août 25 19:12 tmp0.f.268r.dwarf2
-rw-rw-r-- 1 XXX XXX 3578 août 25 19:12 tmp0.f.269r.final
-rw-rw-r-- 1 XXX XXX 2387 août 25 19:12 tmp0.f.270r.dfinish
这些文件是什么,我可以通过传递给 gfortran
的一些不错的选项来避免生成它们吗?
动态库 (.dylib) 适用于您的 mac。在 Linux 上,我们使用共享库 (.so
),您的编译命令应省略 -dynamiclib
,您的警告告诉您未理解。我也会放弃 -m32
除非您有特定需要 32 位代码。
gfortran-5.2.0 -fPIC -shared ./tmp0.f -o ./tmp0.so
将正确构建您的图书馆。如果你把它放在你的构建目录中,你还需要让动态 linker 在它所在的位置,通过使用 LD_LIBRARY_PATH
环境变量或使用 -rpath
link 最终二进制文件的选项 link 将库路径编码到可执行文件中。
你最后遇到的那些乱七八糟的文件来自 gcc 对 -dynamic
的解释。它将 it 解释为 -da
(并警告您不要理解其余部分)。 -d
选项导致 GCC 在编译期间发出调试转储,而 a
表示发出 all 个。可以全部删除,上面给出的命令行不会输出。
我在 tmp0.f
中有一个小的 Fortran 代码 subroutine POWERTWO (n, nsquared)
integer, intent(in) :: n
integer, intent(out) :: nsquared
nsquared = n*n
return
end subroutine POWERTWO
我用 :
编译成一个动态库gfortran-5.2.0 -m32 -dynamiclib ./tmp0.f -o ./tmp0.so -shared
我的 gfortran
是使用 gcc 5.2.0 构建的,配置如下:
Using built-in specs.
COLLECT_GCC=gfortran-5.2.0
COLLECT_LTO_WRAPPER=/usr/local/lvm/gcc-5.2.0/libexec/gcc/x86_64-unknown-linux-gnu/5.2.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --prefix=/usr/local/lvm/gcc-5.2.0 --enable-checking=release --with-gmp=/usr/local/lvm/gmp-6.0.0 --with-mpfr=/usr/local/lvm/mpfr-3.1.2 --with-mpc=/usr/local/lvm/mpc-1.0.3 --enable-languages=c,c++,fortran,objc,obj-c++ --with-isl=/usr/local/lvm/isl-0.14 --with-cloog=/usr/local/lvm/cloog-0.18.4 --program-suffix=-5.2.0
Thread model: posix
gcc version 5.2.0 (GCC)
在 OS X 10.10.5 下,编译生成(没有警告)所需的动态库 tmp0.dylib,但在 ubuntu (15-05) 下,我收到以下警告:
f951: Warning: unrecognized gcc debugging option: y
f951: Warning: unrecognized gcc debugging option: n
f951: Warning: unrecognized gcc debugging option: m
f951: Warning: unrecognized gcc debugging option: i
f951: Warning: unrecognized gcc debugging option: c
f951: Warning: unrecognized gcc debugging option: l
f951: Warning: unrecognized gcc debugging option: i
f951: Warning: unrecognized gcc debugging option: b
和编译产生的,除了动态库tmp0.so,一堆文件:
-rw-rw-r-- 1 XXX XXX 4679 août 25 19:12 tmp0.f.192r.expand
-rw-rw-r-- 1 XXX XXX 1601 août 25 19:12 tmp0.f.193r.vregs
-rw-rw-r-- 1 XXX XXX 1602 août 25 19:12 tmp0.f.194r.into_cfglayout
-rw-rw-r-- 1 XXX XXX 3398 août 25 19:12 tmp0.f.195r.jump
-rw-rw-r-- 1 XXX XXX 1570 août 25 19:12 tmp0.f.207r.reginfo
-rw-rw-r-- 1 XXX XXX 1634 août 25 19:12 tmp0.f.225r.outof_cfglayout
-rw-rw-r-- 1 XXX XXX 1601 août 25 19:12 tmp0.f.226r.split1
-rw-rw-r-- 1 XXX XXX 2980 août 25 19:12 tmp0.f.228r.dfinit
-rw-rw-r-- 1 XXX XXX 3062 août 25 19:12 tmp0.f.229r.mode_sw
-rw-rw-r-- 1 XXX XXX 2980 août 25 19:12 tmp0.f.230r.asmcons
-rw-rw-r-- 1 XXX XXX 6631 août 25 19:12 tmp0.f.234r.ira
-rw-rw-r-- 1 XXX XXX 5581 août 25 19:12 tmp0.f.235r.reload
-rw-rw-r-- 1 XXX XXX 3299 août 25 19:12 tmp0.f.238r.split2
-rw-rw-r-- 1 XXX XXX 4347 août 25 19:12 tmp0.f.242r.pro_and_epilogue
-rw-rw-r-- 1 XXX XXX 3957 août 25 19:12 tmp0.f.245r.jump2
-rw-rw-r-- 1 XXX XXX 4007 août 25 19:12 tmp0.f.258r.stack
-rw-rw-r-- 1 XXX XXX 3925 août 25 19:12 tmp0.f.259r.alignments
-rw-rw-r-- 1 XXX XXX 3513 août 25 19:12 tmp0.f.261r.mach
-rw-rw-r-- 1 XXX XXX 3513 août 25 19:12 tmp0.f.262r.barriers
-rw-rw-r-- 1 XXX XXX 3578 août 25 19:12 tmp0.f.266r.shorten
-rw-rw-r-- 1 XXX XXX 3578 août 25 19:12 tmp0.f.267r.nothrow
-rw-rw-r-- 1 XXX XXX 4216 août 25 19:12 tmp0.f.268r.dwarf2
-rw-rw-r-- 1 XXX XXX 3578 août 25 19:12 tmp0.f.269r.final
-rw-rw-r-- 1 XXX XXX 2387 août 25 19:12 tmp0.f.270r.dfinish
这些文件是什么,我可以通过传递给 gfortran
的一些不错的选项来避免生成它们吗?
动态库 (.dylib) 适用于您的 mac。在 Linux 上,我们使用共享库 (.so
),您的编译命令应省略 -dynamiclib
,您的警告告诉您未理解。我也会放弃 -m32
除非您有特定需要 32 位代码。
gfortran-5.2.0 -fPIC -shared ./tmp0.f -o ./tmp0.so
将正确构建您的图书馆。如果你把它放在你的构建目录中,你还需要让动态 linker 在它所在的位置,通过使用 LD_LIBRARY_PATH
环境变量或使用 -rpath
link 最终二进制文件的选项 link 将库路径编码到可执行文件中。
你最后遇到的那些乱七八糟的文件来自 gcc 对 -dynamic
的解释。它将 it 解释为 -da
(并警告您不要理解其余部分)。 -d
选项导致 GCC 在编译期间发出调试转储,而 a
表示发出 all 个。可以全部删除,上面给出的命令行不会输出。