【发布时间】:2017-01-06 17:57:34
【问题描述】:
我正在尝试用 C 语言创建一个从 Fortran 调用的函数。第一件事。 fortran代码是用f77编译的,c是用gcc编译的。两者都被编译成 .so 库。 c 函数将读取设备上由 fortran 指定的地址和大小的内存。我能够看到传递给 c 的地址和大小,但是我无法在 c 函数中填充数据并将其返回给 fortran。请参阅下面的相关代码。我的假设是数据变量的内存分配或指针语法有问题。
C
void copymemory_( uint32_t *addr, int *size, uint8_t *data )
{
int i;
printf("addr %x \n", *addr);
printf("size %i \n", *size);
for ( i = 0; i<*size; i++)
{
*data[i] = i;
printf("memory %i \n",*data[i]);
}
}
Fortran
integer memory(4)
call copymemory(z'dead', 4, memory)
DO i = 1,memsize
call printf(memory(i))
END DO
【问题讨论】:
-
您为什么认为有问题?会发生什么?在 Fortran 方面,
memsize和printf是什么,z'dead'在哪里做什么?在C端,为什么uint8_t?为什么不能使用标准的 Fortran-C 互操作性? -
好吧,伙计,这在很大程度上取决于调用约定...我一生中从未编写过fortran代码,但我现在就试试
-
任何错误信息?哪个?打印错误的结果?它们长什么样子?
-
printf,是一个只打印到屏幕的函数。 memsize 是一个等于 4 的整数,在 c 函数中打印数组中的值后,可执行文件将崩溃,实际错误是进程 id 由于信号 11 而死亡,并留下了核心转储。
-
不要理会这些描述。编辑问题并将您拥有的内容复制到此处,这样会更清楚。