gpt4 book ai didi

用 ifort 和 icc 编译和链接 Fortran 和 C

转载 作者:太空宇宙 更新时间:2023-11-04 02:39:17 24 4
gpt4 key购买 nike

我正在从 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 标志将静态链接所有 库。在这种情况下,您需要每个库的静态版本(.a 文件)。例如,使用 -lm 将搜索 libm.a。默认情况下不会安装这些库,但可能在您的发行版的 -dev-devel 包中。如果您只想静态链接 Intel 库,那么您应该使用 -static-intel

避免静态链接的一个好技巧是:

1) 将您的程序与-static-intel-Wl,-rpath=./lib 动态链接

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

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

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

最后,如果你需要尝试更多的东西,我已经使用这个命令成功地将一个 Intel Fortran 文件与 gcc 链接起来:

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

希望这有助于...

关于用 ifort 和 icc 编译和链接 Fortran 和 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33781867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com