打开.so链接库出现错误
handle = dlopen("./libReader.so",RTLD_LAZY);
if(handle==NULL)
{
cout<<"dlopen出错";
return 0;
}
SingleTagIdentify= (short (*)(HANDLE hCom, unsigned int TagType, UBYTE *value))dlsym(handle,"SingleTagIdentify");
const char* err=dlerror();
if(err)
{
cerr<<err<<endl;
dlclose(handle);
cout<<"SingleTagIdentify error";
return 0;
}
以上是我的代码,下面是调用dlerror()返回的错误:
/libReader.so: undefined symbol: SingleTagIdentify
SingleTagIdentify error。请问这是为什么啊?
我用nm命令查看libReader.so里面有SingleTagIdentify()这个函数的
zhengjinping@zhengjinping-K42JE:~/rfid$ nm -D libReader.so
……
00002920 T _Z17SetReaderDateTimeiP8DATETIME
00003fc0 T _Z17SingleTagIdentifyijPh
00002fd0 T _Z18Gen2ReadTagWithEpcihjhPhhhS_
……
请各位指导一下这是因为什么原因?那个库是我买RDIF读卡器时候文件资料附带的,里面不会有什么错误。
------解决方案--------------------在你引用的头文件里,加上extern C试试
extern C
{
#include "你的头文件"
}
------解决方案--------------------C++编译的.so命名是C++风格,dlsym需要你传入.so里那个函数名,不是代码里那个名字。
用C++编译.so的时候把函数声明以及定义均注明为extern "C"的即可。