c - 使用 Visual Studio 结合 Intel Fortran,如何解决使用不同类型的名称重整问题

标签 c linker fortran name-mangling fortran-iso-c-binding

我已经获得了一个可爱的 Fortran 和 C 代码网格的程序。 为了编译该程序,它需要一系列由软件供应商预编译的库。其中包括 Intel MKL、MPICH2 等。 在linux上一切都工作得很好。但在 Windows 上我陷入困境:

使用命令行,我可以通过以下两种方式使用 ifort 编译程序:
[A] ifort/Qlowercase/assume:下划线......
[B] ifort/Quppercase/assume:nounderscore ........

如果我决定使用选项A,我将得到一系列丢失的符号,因为某些外部库是使用大写无下划线编译的,并且我无法解析这些符号。 同样,如果我选择选项 B,其他外部库会提示,因为它们是使用带下划线的小写字母编译的。

有没有办法在链接状态下重新映射符号/功能?还有其他选择吗?

最佳答案

如果您在 Fortran 源代码中使用 ISO C 绑定(bind),您可以准确指定要调用的 C 例程的名称。根据特定例程的情况,包含或不包含下划线。 “绑定(bind)名称”也区分大小写,因此您还可以控制例程名称的这方面。然后使用编译器选项,以便编译器不会进一步更改名称。

关于c - 使用 Visual Studio 结合 Intel Fortran,如何解决使用不同类型的名称重整问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3815992/

相关文章:

Android NDK/JNI : Building a shared library that depends on other shared libraries

c++ - Glew 运行时/链接器错误

c - 严格的 ANSI C - 8 位结构元素违规?

c - 宏展开后的输出似乎不符合理解(可能是错误的理解)

c++ - Windows 中使用 Visual Studio 的链接器错误 (LNK2005)

fortran - maxloc 的形状错误

arrays - Fortran 中数组索引的段错误

ubuntu - 在 Ubuntu 20.04 上编译和运行 Xrotor

c++ - 如何摆脱不安全的功能(sprintf,...)

c - 当在 DLL 或 .so 中调用函数时,当编译器使用对齐和填充进行自己的结构布局时,为什么传递结构是可靠的?