我从gcc切换到Intel ifort和icc。
Fortran代码主要是遗留代码,与系统的其他部分类似。
主程序用C语言编写。它处理I / O并将所有内容传递给Fortran子程序。
现在我用:
编译Fortran部分cd fortran
ifort -I../inc -debug full -c *.[fF]
cd ..
对于C和链接,我试过:
icc -ansi -static -debug full -Wall -o testout \
-I./inc -L./lib\
main.c \
fortran/*.o \
-lifcore -limf -lm\
这给了我:
ld: cannot find -lm
ld: cannot find -lm
ld: cannot find -lc
ld: cannot find -ldl
ld: cannot find -lc
这主要是从以前的bash脚本复制到用gcc编译。
答案 0 :(得分:2)
-static
标志将静态链接所有库。在这种情况下,您需要拥有每个库的静态版本(.a
文件)。例如,使用-lm
将搜索libm.a
。默认情况下不会安装这些库,但可能位于您的发行版的-dev
或-devel
个包中。
如果您只想静态链接英特尔库,则应使用-static-intel
。
避免静态链接的好方法是:
1)使用-static-intel
和-Wl,-rpath=./lib
2)使用ldd
查找您的程序需要哪些库
3)创建一个目录lib
,您可以在其中复制所有必需的动态库
4)不要将代码作为单个静态二进制文件分发,而是将其作为二进制文件+ lib目录进行分解(假设库的许可证允许它)。
最后,如果您需要尝试更多内容,我已成功使用此命令将英特尔Fortran文件与gcc链接:
$ gcc fortran_file.o c_main_file.o -lifcore -lirc -lcomposerxe_gen_helpers_core_2.3
希望这会有所帮助...