使用ifort和icc编译并链接Fortran和C.

时间:2015-11-18 13:53:41

标签: c compilation fortran icc intel-fortran

我从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编译。

1 个答案:

答案 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

希望这会有所帮助...