gpt4 book ai didi

c++ - fortran代码调用c代码时出错

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

我用过fortran代码调用c代码的引用书上的一个方法。方法是,如果你的c代码中的函数名是大写的,你可能不会在你的fortran代码中做额外的更改。以下是我的代码。

Source1.f90:

program main
implicit none
call c_subprint()
endprogram

ccode.c:

#include <stdio.h>
#include <string.h>
#ifdef _cplusplus
extern "C" {
#endif
void _stdcall C_SUBPRINT()
{
int a;
printf("%s\n","kk");
scanf("%d",&a);
}
#ifdef _cplusplus
}
#endif

报错信息是main函数找不到_C_SUBPRINT(LNK2019)。但是我已经将c代码生成的.lib添加到fortran代码中了。而我的代码和引用书上的几乎一样。怎么了?

最佳答案

不同的 Fortran 编译器生成不同的调用。许多在例程名称中添加下划线以避免名称与 C 代码冲突。很难说你是否应该完全遵循一本未命名的引用书的例子。过去,要混合使用 Fortran 和 C,您必须了解一些编译器内部结构。在这里,Fortran 编译器似乎在名称的开头添加了下划线。您可能可以通过在 C++ 代码中添加它来解决问题。但这不是可移植的,原则上可能会随着编译器版本的不同而改变。有更好的方法:Fortran ISO_C_Binding。这是 Fortran 语言标准的一部分,因此是标准的和可移植的。 gfortran 手册的“混合语言编程”一章和 Stackoverflow 上的其他问题中给出了示例。

关于c++ - fortran代码调用c代码时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17005979/

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