永发信息网

如何利用Linux C动态加载Fortran的so文件?程序编译通过,但在程序运行时,报:Segmentation fault

答案:1  悬赏:70  手机版
解决时间 2021-11-20 23:00
  • 提问者网友:沉默菋噵
  • 2021-11-20 12:50
如何利用Linux C动态加载Fortran的so文件?程序编译通过,但在程序运行时,报:Segmentation fault
最佳答案
  • 五星知识达人网友:持酒劝斜阳
  • 2021-11-20 14:17
1、你没有判断 handler 是否为 NULL ,也许你 dlopen就失败了。
2、 你没有判断 testint 是否为 NULL, 如果 handler 是 NULL, 或者在库中没有找到 "testint_",都会返回 NULL

我不懂 fortran,不过很显然你在 fortran中的函数名是 testint, 为什么在dlsym的时候加了下划线?追问1. 我加了判断handler 是否为 NULL,结果也是一样
2. 我用nm libtfor1.so时,函数名显示为testint_。另外,我也尝试写成void (*testint)(int) = dlsym(handler, "testint");,其结果一样
3. 我在主程序中,不加(*testint)(12);,程序运行没有问题追答你没有判断dlsym 出来的 testint 是否为 NULL,我已经说过了…… 这个是根本原因追问对,是dlsym这一步有问题,但为什么出现问题呢?如何修改正确呢?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯