gpt4 book ai didi

c++ - dlsym 导致段错误

转载 作者:行者123 更新时间:2023-11-30 05:02:52 27 4
gpt4 key购买 nike

所以我一直试图从本地 dylib 获取符号,但每当我尝试做任何事情时,我都会遇到段错误,我不确定为什么会发生这种情况。我已经在其他程序中看到过这样做并且它们工作正常,所以我知道它有效但我似乎无法做到:(。感谢任何帮助。干杯

typedef void (*func_t)();
func_t testFunction;


template<class type>
type findSymbol(string dylib, string symbol)
{
void* handle = dlopen(dylib.c_str(), RTLD_NOW);

if(!handle)
{
debug(dlerror());
return nullptr;
}

// Reset errors
dlerror();

type sym = (type)dlsym(handle, symbol.c_str());

const char* dlsym_error = dlerror();
if(dlsym_error)
{
debug(dlsym_error);
dlclose(handle);
return nullptr;
}

sym(); <--- Executes fine

dlclose(handle);

return sym;
}

int main()
{
// Example 1
testFunction = findSymbol<func_t>("./test.dylib", "hello"); <--- Seg fault

// Example 2
func_t f = findSymbol<func_t>("./test.dylib", "hello"); <--- Fine
f(); <--- Seg fault

return EXIT_SUCCESS;
}

最佳答案

来自 the official POSIX dlclose reference :

Once a symbol table handle has been closed, an application should assume that any symbols (function identifiers and data object identifiers) made visible using handle, are no longer available to the process.

这意味着,一旦您调用了 dlclose,您就不能再使用该模块中的任何函数。

关于c++ - dlsym 导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49645677/

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