即使符号存在于.so文件中,也无法加载该符号
Unable to load symbol even if it is present in .so file?
现在,我已经尝试加载动态库一个小时了,一直处于无法加载符号的状态,让我向您展示我的问题。这是我的代码片段,
void *hInstLib = dlopen("libnbuVmwareTools.so",RTLD_NOW);
LoadOneFunc(hInstLib,(void **)&vmcGetDiskChangedInfoStrm_Ptr,"vmcGetDiskChangedInfoStrm");
void LoadOneFunc(void* dlHandle, void** pFunction, const char* funcName)
{
std::stringstream strStream;
*pFunction = dlsym(dlHandle, funcName);
char* dlErrStr = dlerror();
if (*pFunction == NULL || dlErrStr != NULL)
{
strStream << "Failed to load " << funcName << ". Error = " << dlErrStr << "n";
throw std::runtime_error(strStream.str().c_str());
}
}
现在,我已经检查了vmcGetDiskChangedInfoStrm是否存在于libnbuVmwareTools.so中,
并且lib加载成功,但是,
[root@vm vmcbt]# g++ dltest.cpp -L/root/vmware/usr/openv/lib -lnbuVmwareTools
[root@vm vmcbt]# ./a.out
Successfully loaded Library
Error while dynamically loading : Failed to load vmcGetDiskChangedInfoStrm. Error = /root/vmware/usr/openv/lib/libnbuVmwareTools.so: undefined symbol: vmcGetDiskChangedInfoStrm
当使用nm-C命令检查.so文件中是否存在符号时,
[root@vm vmcbt]# cd
[root@vm ~]# cd /root/vmware/usr/openv/lib/
[root@vm lib]# nm -C libnbuVmwareTools.so | grep vmcGetDiskChangedInfoStrm.
00000000006680bc T vmcGetDiskChangedInfoStrm(void*, int, long, char const*, char const*, char const*, char const*, std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >&, bool)
我不明白这个问题,如果能在这方面提供任何帮助,我将不胜感激。
函数被定义为C++函数(我可以看到这一点,因为它在列表中有参数类型)。所以你需要弄清楚这个名字是什么,可能是_Z25vmcGetDiskChangedInfoStrmPvilPKcS1_S1_S1_RSt18basic_stringstreamIcSt11char_traitsIcESaIcEEb
,然后寻找它。
相关文章:
- 共享对象、符号、C/C++ 库链接和加载
- C++单例,不会为此文档加载任何符号
- 是否可以在加载RTLD_LOCAL库中合并弱符号,如 vtables/typeinfo?
- 如何动态加载和调用具有特定于库的类型作为函数参数的符号
- C++ 未从同一目录加载的 PDB 符号
- 在FreesWitch中使用AWS C SDK加载模块时未定义的符号错误
- Visual Studio 2017 和 2019 拒绝为C++项目加载符号
- C++调用lua_dostring来加载具有"require('cjson')"的Lua Scrip引发错误:cjson.so:未定义的符号:lua_getfield
- 在共享C++库中加载共享库时C++未定义的符号,该库本身由 Python 加载
- 通过无符号 char 别名进行对象访问,加载和存储时会发生什么?
- C++ Linux 加载共享库时出错“未定义的符号:pthread_create”
- C++ MySQL 驱动程序>连接与 2017 未加载符号
- Android本机运行时无法加载符号,即使它们实际上是在加载的.so文件中找到的
- 在 TensorFlow 中加载自定义操作时出现未定义的符号错误
- 尽管存在符号链接,但 ld 无法加载库
- 在Python中加载共享库时未定义的符号
- 加载共享库时未定义的符号"tbb internal Allocate"
- 加载具有相同符号的两个共享库时是否存在符号冲突
- 在加载时有条件地链接到符号
- 尝试在Visual Studio 2012中编译时,符号加载错误