- gdb的原理谁给我讲讲?Dwarf是干啥的?
- 请大家帮我看看Makefile里目标放前后的差别
- 问一个c++的makefile的基础问题
- c语言中怎么能打印输出十六进制数呢?
- 我见过最差的c语言教程书
- 关于Linux下的 O_NONBLOCK 问题
- AS400上刚接触C,编译出错。求助!
- 请教一个关于makefile的问题
- backtrace_symbols_fd 输出的函数地址
- 基于文件描述符的操作中 ~ 有获取当前指针位置的函数吗?
- 讨论C语言的编程模式
- (求救)程序挂着退不出来
- 如果__attribute__ ((packed))沒有作用,要檢查那些設定?
- 某难度公司的2011的笔试题
- 标准C里函数可不可以是结构体的成员?
- 前段时间碰到的加载多个共享库的问题
- 结构体中数组的访问,为什么不越界
- 始终搞不明白,select函数的第一个参数“最大描述符加1”,这个+1到底是什么东西?
- 发布自己写的一个小型全文搜索引擎开源项目(c++)
- c函数能返回一个数组吗?
我在主程序中加载插件,进行数据处理
[table=95%][tr][td][font=FixedSys][color=#0000cc]#include <dlfcn.h>
typedef void *atom;
typedef atom (*Element) (atom, char *);
...
...
Element
findSymbol (char *name)
{
static void *plugin;
plugin = dlopen ("./plugin", RTLD_NOW);
if (plugin)
{
return dlsym (plugin, name);
}
printf ("%s", dlerror ());
return NULL;
}[/color][/font][/td][/tr][/table]
当插件使用C编写时候没有任何问题,但是使用C++编写时,dlopen不能正确的解析符号,于是查找资料,看到这篇文章中提到了C++的“name mangling”(http://linux.web.cern.ch/linux/documentation/mirror/howto/C++-dlopen.html),发现在不得不在主程序中链接插件依赖的一些库,于是使用C++编译器编译主程序,结果出现有名的void*指针问题
[table=95%][tr][td][font=FixedSys]pipeline.c: In function ‘void* (* findSymbol(char*))(void*, char*)’:
pipeline.c:49: 错误:从类型 ‘void*’ 到类型 ‘void* (*)(void*, char*)’ 的转换无效[/font][/td][/tr][/table]
函数findSymbol不能通过编译,请高手指点

