Linux下动态链接库调用时遇到的问题

本文探讨了使用GCC和G++编译器时遇到的函数名称处理差异问题。作者在Linux环境下用G++编译生成动态链接库,并尝试用GCC进行调用时出现问题。通过分析汇编文件发现,G++会将函数名转换为特定格式,导致GCC无法直接识别。最终通过手动调整函数名称解决了问题。

最近因项目需要,开始在Linux下开发动态链接库以及调用。

其中遇到了个关于gcc与g++编译器的问题。

首先我对a.cpp文件用g++编译生成动态链接库a.so,

接着用gcc编译b.c文件来调用生成的a.so中的函数时,却出现找不到函数a( )的错误信息,但是该问题在我用g++编译的时候却不会出现,而且能够正常运行。

究其原因,从gcc编译后的汇编文件b.s看出,调用函数的名称为a();但是从g++编译出来的汇编文件b.s中却发现函数名称是_Z5aii(),看来是不同编译器对于函数名称有不同的处理。

于是我将b.c文件中要调用的a()函数改为调用_Z5aii()函数,竟然就正常编译通过了,果然是因为函数名称不同而找不到动态链接库中对应函数的问题~~~~~

终于把这问题解决了,项目的开发又可以进入下一阶段了,真是可喜可贺,希望师弟们加油,能够顺利把项目完成,顺利毕业^_^

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20741649/viewspace-630687/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20741649/viewspace-630687/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值