【发布时间】:2014-03-11 21:47:30
【问题描述】:
我正在使用 Visual Studio 2012 和 intel fortran 2013 在 Windows 上编译 Fortran 程序。在程序中,我调用了一个 C 函数,它是静态库的一部分:
call myfunction(arg1,arg2,...);
当我在调试模式下运行时,一切都很好。当我在发布模式下运行它时,程序在该函数调用期间崩溃(我通过在调用之前/之后打印到屏幕来测试它)并出现以下错误:
forrtl: severe (157): Program Exception - access violation
现在有趣的部分,如果我在调用前后添加打印语句,如下所示
print 'Calling myfunction'
call myfunction(arg1,arg2,...);
print 'myfunction finished'
程序在发布模式下完美运行。如果我删除任何一个打印语句(或两个),我会收到上述错误!
有人知道这里会发生什么吗?
更多信息:
Fortran 中的函数声明为:
!DEC$ ALIAS myfunction, 'myfunction'
C 中的函数声明为:
extern "C" void myfunction(double *arg1, double *arg2, ...)
【问题讨论】:
-
请改进问题标题
-
1) 它是可变参数函数吗? 2) 你是如何在 Fortran 中声明 myfunction 的? 3) myfunction 是如何在 C - __stdcall 或 __cdecl 中声明的?
-
抱歉,什么是可变参数函数?
-
对不起,你是一块一块地改。只需显示实际代码。
标签: fortran intel-fortran