首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引起分段故障的dlsym

引起分段故障的dlsym
EN

Stack Overflow用户
提问于 2018-04-04 07:57:54
回答 2查看 1.2K关注 0票数 1

因此,我一直试图从本地dylib获取符号,但是每当我尝试做任何事情时,我都会遇到一个seg错误,我不知道为什么会发生这种情况。我在其他程序中见过这样的工作,它们运行得很好,所以我知道它能工作,但我似乎做不到。任何帮助都是非常感谢的。干杯

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-04 08:03:49

来自 reference

一旦符号表句柄关闭,应用程序应假定使用句柄显示的符号(函数标识符和数据对象标识符)不再适用于该进程。

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

票数 1
EN

Stack Overflow用户

发布于 2020-03-23 08:46:50

我也遇到了类似的问题,结果是我将返回的64位指针从dlopen截断为32位值,并试图将符号与该值链接。

例如:-

代码语言:javascript
复制
#define HANDLE int;
HANDLE library = (HANDLE)dlopen("libname.so");
HANDLE symbol = (HANDLE)dlsym(library, "symbol");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49645677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档