首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C中使用Fortran函数导致启动时seg错误

是由于C和Fortran之间的函数调用约定不匹配导致的。C和Fortran使用不同的函数调用约定,包括参数传递方式、参数压栈顺序等。当在C中调用Fortran函数时,如果函数调用约定不匹配,就会导致内存访问错误,进而引发seg错误。

为了解决这个问题,可以采取以下几种方法:

  1. 使用Fortran的接口声明:在C中使用Fortran函数之前,需要在C代码中声明Fortran函数的接口,以确保函数调用约定的匹配。接口声明可以通过使用extern关键字和#pragma指令来实现。例如:
代码语言:c
复制
extern void my_fortran_function_(int* arg1, float* arg2);
#pragma weak my_fortran_function_ = my_fortran_function
  1. 使用Fortran的模块化编程:将Fortran函数封装在一个模块中,并在C中调用该模块。模块化编程可以提供更好的接口封装和函数调用约定的一致性。
  2. 使用C语言重新实现Fortran函数:如果可能的话,可以考虑使用C语言重新实现Fortran函数,以避免函数调用约定不匹配的问题。

总结起来,解决在C中使用Fortran函数导致启动时seg错误的方法包括使用Fortran的接口声明、使用Fortran的模块化编程和使用C语言重新实现Fortran函数。具体选择哪种方法取决于具体的情况和需求。

相关链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • java开发操作系统:同时运行多窗口多任务

    在系统有了命令行窗口后,我们可以直接在窗口内输入命令,启动应用程序。当通过命令行加载运行用户开发的程序时,命令行会被‘冷冻’,这是因为被启动的程序与命令行属于同一进程,CPU要把运行的权限交给应用程序,命令行窗口得不到运行的机会,因此看上去像死机一样。 这造成的一个问题是,命令行窗口一次只能加载一个应用程序,然后必须等到程序运行结束后,CPU控制权交还给命令行窗口时,它才有机会启动另一个应用程序。我们可以把命令行窗口的程序启动机制进行修改,使得应用程序运行后,控制台仍然能获取CPU的执行权限,但这么改动难度

    06

    ADINA常见问题解答

    Q:怎样改进ADINA-AUI 中实体的显示效果?  A:在某些情况下,ADINA-AUI 显示的实体在边界上不光滑,这仅仅是显示的问题,并不影响几何尺寸的精确度。为了改进显示的效果, 1 点击Modify Mesh Plot 。 2 点击Line Depiction 。 3 将ADINA-M Chord Angle 由默认的0.4改为0.1 并且点击OK。 4 点击Surface Depiction 。 5将ADINA-M Chord Angle 由默认的0.4改为0.1 并且点击OK。 6 点击OK,关闭Modify Mesh Plot 对话框。 Q:为什么AUI 的图形功能在我的计算机上不能正常的工作?  A:有些计算机的显卡在Open GL 图形系统中不能正常的工作。请切换到Windows GDI 图形系统,在Edit 菜单中,点击Graphics System ,然后选择Windows GDI 图形系统。 Q:当我从ADINA-AUI 打印文件时,为什么打印不出来任何结果?  A:注意只有Windows 版本才会发生这样的问题。 当使用Open GL 图形方式时,有的打印机会出现上述问题。为解决该问题,当打印的时候,选择Windows GDI 图形方式。从菜单Edit > Graphics System… 中选择Windows GDI 作为图形系统,然后开始打印。 注意打印结束后,可以将图形系统切换回Open GL 以便获得更快的图形效果。 Q:为什么安装了浮动License(Floating Industry或者Floating Educational)后,Adina无法启动? A:如果安装过程正确,而且电脑上的防火墙不阻止Adina读取服务器上的License,那么这样的问题一般是由于计算机使用了中文名。不论是Adina的服务器还是Adina客户端,都不允许使用中文计算机名。 Q:如何将壳单元厚度显示出来? A:在Display-->Geometry/Mesh Plot-->Modify打开的窗口中点击Element Depiction,在新打开的窗口中的Shell Element Attributes域中选择Top/Bottom(默认是Mid-Surface)。

    01
    领券