LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 514|回复: 6

共享库开发的问题

[复制链接]
发表于 2005-2-15 14:14:46 | 显示全部楼层 |阅读模式
编译生成了一个共享库,里面包含一个函数:
int sharelibfile();

但是在最后生成的so文件中,用nm查看,结果符号成了_Z11sharelibfile,而不是
sharelibfile了,

因此在用dlsym函数时需要使用_Z11sharelibfile,这样与库函数中定义的名称不一致了。

请问怎样才能将两个不同的名称统一起来,方便使用?多谢
发表于 2005-2-15 16:37:31 | 显示全部楼层
看看你用什么编译的, 如果是C++的话,应该使用extern C来处理一下你函数的声明和定义
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-15 18:52:01 | 显示全部楼层
extern "C"在库函数输出名称上也有作用啊?
回复 支持 反对

使用道具 举报

发表于 2005-2-15 19:48:28 | 显示全部楼层
可以强迫用C++编译的程序生成的函数名不被C++编译器篡改。
缺省情况下,用C++编译器生成的函数都会在函数名上做一定的改动(有规律的),为了适应C++中的重载。
所以如果你写的是全局函数之类的东西,最好是加上这个东西来限定。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-15 21:43:38 | 显示全部楼层
了解,多谢!
回复 支持 反对

使用道具 举报

发表于 2005-2-15 21:47:33 | 显示全部楼层
如果用 c  或者 gtk+ 就没这种事了吧。我还没碰到过。
回复 支持 反对

使用道具 举报

发表于 2005-2-18 16:29:53 | 显示全部楼层
Post by wide288
如果用 c  或者 gtk+ 就没这种事了吧。我还没碰到过。

c语言没有函数重载,自然c编译器没有必要mangle函数名。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表