gpt4 book ai didi

c++ - 无法加载符号,即使它存在于 .so 文件中?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:15 24 4
gpt4 key购买 nike

现在,我一直在尝试加载动态库一个小时,一直卡在无法加载符号,让我向您展示我的问题。这是我的代码片段,

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)

我没有遇到这个问题,如能提供任何帮助,我们将不胜感激。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com