You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Intel Fortran调用C共享库接收整数参数异常问题求助

错误原因

你的Fortran互操作接口未声明C绑定属性,Intel Fortran对C互操作语法的合规性要求比gfortran更严格,缺失bind(C)修饰时,编译器不会按照C调用约定处理参数传递逻辑,即便你给参数加了value属性,实际仍然会以Fortran默认的传引用方式传递参数,导致C侧读取到的是栈地址值而非传入的整数。

修正方案

只需修改Fortran侧的接口定义,补充bind(C)声明,同时将函数返回值显式标注为C兼容的integer(c_int)类型即可:

! Interface with shared library
abstract interface
    !% -------------------------------------------------------------------------------
    !% Simulation
    !% -------------------------------------------------------------------------------
    integer(c_int) function print_number(number) bind(C, name='print_number')
        use, intrinsic :: iso_c_binding
        implicit none
        integer(c_int), value :: number
    end function print_number
end interface

其中name='print_number'是显式指定绑定的C函数符号名,可避免不同编译器对符号名大小写、下划线后缀的处理差异导致的符号找不到问题。

额外校验项

如果修改后仍有异常,可以检查编译脚本配置:

  • 编译C动态库时必须添加-fPIC参数生成位置无关代码
  • 运行程序前需将.so文件所在目录加入LD_LIBRARY_PATH环境变量,避免加载到其他路径下的同名异常库

内容的提问来源于stack exchange,提问作者gandresr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:24:05