使用 ifort 和 icc 编译和 link Fortran 和 C

Compile and link Fortran and C with ifort and icc

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

-static 标志将 link 所有 静态库。在那种情况下,您需要每个库的静态版本(.a 文件)。例如,使用 -lm 将搜索 libm.a。默认情况下不安装这些库,但可能在您的发行版的 -dev-devel 包中。 如果您只想 link 静态地使用英特尔库,那么您应该使用 -static-intel.

避免静态 linking 的一个好方法是:

1) 动态 link 您的程序 -static-intel-Wl,-rpath=./lib

2) 使用 ldd 查找您的程序需要哪些库

3) 创建一个目录lib,在其中复制所有需要的动态库

4) 您可以将代码分发为二进制文件 + lib 目录(假设库的许可证允许),而不是将代码分发为单个静态二进制文件。

最后,如果你需要尝试更多的东西,我已经成功地 link 使用 gcc 的英特尔 Fortran 文件使用这个命令:

$ gcc fortran_file.o c_main_file.o -lifcore -lirc -lcomposerxe_gen_helpers_core_2.3

希望这对您有所帮助...