当前位置: 技术问答>linux和unix
c程序调dlopen C++的动态库的问题,急!
来源: 互联网 发布时间:2015-04-10
本文导语: c程序调dlopen C++的动态库时,报符号__1c2n6FI_pv_: 参照的符号没有找到 查到原因是c++中使用了new,但又不能不用new ,这该如何解决? new 是在c++中那个库中实现的? | in cpp file extern "C" void ...
c程序调dlopen C++的动态库时,报符号__1c2n6FI_pv_: 参照的符号没有找到
查到原因是c++中使用了new,但又不能不用new ,这该如何解决?
new 是在c++中那个库中实现的?
查到原因是c++中使用了new,但又不能不用new ,这该如何解决?
new 是在c++中那个库中实现的?
|
in cpp file
extern "C" void * create();
void * create (){
return new MyClass();
}
in c file :
dlopen(fp,"create");
void * myclass=create();
extern "C" void * create();
void * create (){
return new MyClass();
}
in c file :
dlopen(fp,"create");
void * myclass=create();
|
create 函数应该说明为c函数,并在函数表中输出
cpp文件最好生成so文件
gnu c++ :libstdc++.a
cpp文件最好生成so文件
gnu c++ :libstdc++.a
|
new用malloc,delete用free
头文件为stdlib.h
头文件为stdlib.h
|
你的动态库动态连接的C++标准库在你的C主程序里没有连接,所以有这个问题。
|
叫什么名字也不能连接到C程序里。最好把你的主程序用C++编写,这样就可以解决问题。
|
现在楼主的应用不是dlopen符号找不到,是dlopen在装载动态库时就出问题,这个和extern "C"没有关系。即使用extern "C"声明和定义了,一样会出现在的问题。
|
该用动态连接库吧,应该可以解决问题的
to fierygnu:
__1c2n6FI_pv_这个函数的名字不像哪个库输出的函数
如果用so格式的话应该会自动加载库的
我只是猜测而已
to fierygnu:
__1c2n6FI_pv_这个函数的名字不像哪个库输出的函数
如果用so格式的话应该会自动加载库的
我只是猜测而已
|
__1c2n6FI_pv_是被g++ mangle后的符号名。
|
malloc