DLSYM导致分割故障
dlsym causing segmentation fault
所以我一直在尝试从本地迪利布获得符号,但是每当我尝试做任何事情时,我都会得到SEG错误,我不确定为什么会发生这种情况。我已经在其他程序中看到了这一点,而且它们效果很好,所以我知道它有效,但我似乎无法做到:(。任何帮助都将受到赞赏。欢呼
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;
}
来自官方POSIX dlclose
参考:
一旦关闭了符号表句柄,应用程序应假定使用句柄可见的任何符号(函数标识符和数据对象标识符(不再可见。
这意味着,一旦您致电dlclose
,您就无法再使用模块中的任何功能。
我也有一个类似的问题,事实证明我正在将返回的64位指针从dlopen截断为32位值,并试图将符号与该值链接起来。
例如: -
#define HANDLE int;
HANDLE library = (HANDLE)dlopen("libname.so");
HANDLE symbol = (HANDLE)dlsym(library, "symbol");
相关文章:
- 分割故障C++矩阵
- C ,二进制树的高度,而不是检查我的子树是否为空,而是在检查我的子树是否是叶子节点.抛出分割故障
- 我正在为此代码分割故障
- 在执行strcpy时获取分割故障错误
- 空隙指针分割故障
- Xcode会产生分割故障,而不是例外
- OPENCV C 中的分割故障误差
- 分割故障:核心倾倒C 矢量对字符串:
- C 2D数组导致分割故障(核心倾倒)
- 分割故障/错误读数变量-C 列表
- DLSYM导致分割故障
- 使用C 中的操作员删除的分割故障
- 使用Linux X64下的Libmozjs-52(SpidermonKey)进行分割故障
- 使用长变量时分割故障(11)错误
- C - 返回字符串时的分割故障
- 创建VertexArray时的分割故障
- 向量分割故障的向量
- 从std :: fileSystem ::路径对象的类中退出时的分割故障
- C 矢量分割故障
- 基于向量的数据格式的分割故障误差