【发布时间】:2016-06-14 10:10:00
【问题描述】:
我似乎无法弄清楚为什么这不起作用。
/* main.cpp */
#include <stdio.h>
extern "C"
{
int __stdcall inhalf(int *);
}
int main()
{
int toHalf = 2;
int halved = inhalf(&toHalf);
printf("Half of 2 is %d", halved);
return 0;
}
好的,看起来不错。
$ g++ -c main.cpp
没有错误。
! functions.f90
function inhalf(i) result(j)
integer, intent(in) :: i
integer :: j
j = i/2
end function inhalf
我很确定这是对的。
$ gfortran -c functions.f90
到目前为止一切都很好......
$ gcc -o testo main.o functions.o
main.o:main.cpp:(.text+0x24): undefined reference to `inhalf@4'
collect2.exe: error: ld returned 1 exit status
我已经查找了一个多小时,但找不到任何适用于此案例的内容。我该如何解决这个问题?
【问题讨论】:
-
inhalf在 fortran 中将被称为inhalf_在 c 中。 -
inhalf@4表示,inhalf()的函数声明仍然涉及一些不需要的修改。 -
对 Fortran 问题使用标签 fortran。在需要区分的地方添加特定版本。
-
有一个完整的标签是关于接口 C 和 Fortran fortran-iso-c-binding
-
@BoBTFish 不一定。编译器可能会选择其他名称作为函数名。您甚至可以在大多数 Fortran 编译器中禁用下划线。
标签: c++ gcc fortran g++ gfortran