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
相关产品推荐
相关产品推荐

