当前位置: 技术问答>linux和unix
linux下的动态库问题
来源: 互联网 发布时间:2015-10-05
本文导语: 各位高人,我有个问题想请教大家,我在写linux下的动态库和调用程序,是从windows下移植的,原来是用VC++6.0写的。在移植过程中,遇到了一些问题,我另外按照网上的一些文档用C写了一个小程序,可以正常生成SO文...
各位高人,我有个问题想请教大家,我在写linux下的动态库和调用程序,是从windows下移植的,原来是用VC++6.0写的。在移植过程中,遇到了一些问题,我另外按照网上的一些文档用C写了一个小程序,可以正常生成SO文件,调用程序也可以正常的使用,整个过程没有什么问题。但是换用C++的语言后,动态库可以正常的编译,可是调用程序却不能正常编译,编译过程中提示我是类型转换错误,如果我将类型修改后,编译能过,可是却不能正常使用。dlsym是void *型的,而我so文件里的函数类型是int型的,所以报类型出错,但相同的方式在C写的程序里却没有什么错误。我想知道在linux下的so文件,C和C++编译有什么不用,有哪些要注意的地方,为什么会出现我前面所说的错误。谢谢!
|
/*Find the loaded function */
(void *)Fun = dlsym( FunctionLib, "Fun");
dlError = dlerror();
...
==>
Fun = (void (*)(int))dlsym(FunctionLib, "Fun");
....
(void *)Fun = dlsym( FunctionLib, "Fun");
dlError = dlerror();
...
==>
Fun = (void (*)(int))dlsym(FunctionLib, "Fun");
....
|
用 int类型解释void * 参数,编译器能过吗?
|
c++对void*的处理与c有点不同。
你可以改用template来处理这个问题.
这两个语言编写的.so在我看来没什么区别,呵呵
你可以改用template来处理这个问题.
这两个语言编写的.so在我看来没什么区别,呵呵
|
你把.so中的函数原型和你调用dlsym部分的代码贴出来看看
|
extern "C"
|
g++