在dlmopen之后使用dlsym但使用dlopen dlsym时遇到分段错误

问题描述

我在dlmopen中遇到问题,但是我已经在我的cpp程序中(在Linux中)成功使用了 dlopen dlsym

void *lib_handle = dlopen(lib_path,RTLD_Now);

此后,我使用dlsym获取功能

function_type = (function_type)dlsym(lib_handle,"function_name")

这很好用,我什至已经成功调用了此方法

但是当尝试使用 dlmopen 而不是dlopen来获取库句柄时,我在句柄上调用dlsym时遇到了问题。 dlmopen需要一个额外的参数来指定应在其中加载库的名称空间。我尝试使用两个可用值(LM_ID_BASE,LM_ID_NEWLM)。

void *lib_handle = dlmopen(LM_ID_NEWLM,lib_path,RTLD_Now)

调用dlsym获取符号地址失败

dlsym(lib_handle,"function_name")

错误是细分错误

Program received signal SIGSEGV,Segmentation fault.
0x00007ffff7de019b in _dl_lookup_symbol_x (undef_name=0x555555556818 "function_name",undef_map=0xfffffffff7ff5ae0,ref=0x7fffffffdf98,symbol_scope=0xfffffffff7ff5e68,version=0x0,type_class=0,flags=2,skip_map=0x0) at dl-lookup.c:805
805     dl-lookup.c: No such file or directory.

完整堆栈跟踪

#0  0x00007ffff7de019b in _dl_lookup_symbol_x (undef_name=0x555555556818 "function_name",skip_map=0x0) at dl- 
lookup.c:805

#1  0x00007ffff6704fe6 in do_sym (flags=<optimized out>,vers=0x0,who=0x555555555fcf 
<bind+31>,name=0x555555556818 "function_name",handle=0xfffffffff7ff5ae0) at dl-sym.c:151

#2  _dl_sym (handle=0xfffffffff7ff5ae0,who=0x555555555fcf 
<bind+31>) at dl-sym.c:254

#3  0x00007ffff7bd20e4 in dlsym_doit (a=a@entry=0x7fffffffe1e0) at dlsym.c:50

#4  0x00007ffff670551f in __GI__dl_catch_exception 
(exception=exception@entry=0x7fffffffe170,operate=0x7ffff7bd20d0 <dlsym_doit>,args=0x7fffffffe1e0)
at dl-error-skeleton.c:196

#5  0x00007ffff67055af in __GI__dl_catch_error (objname=0x7ffff7dd40f0 <last_result+16>,errstring=0x7ffff7dd40f8 <last_result+24>,mallocedp=0x7ffff7dd40e8 <last_result+8>,operate=<optimized out>,args=<optimized out>) at 
dl-error-skeleton.c:215

#6  0x00007ffff7bd2745 in _dlerror_run (operate=operate@entry=0x7ffff7bd20d0 <dlsym_doit>,args=args@entry=0x7fffffffe1e0) at dlerror.c:162

#7  0x00007ffff7bd2166 in __dlsym (handle=<optimized out>,name=0x555555556818 "function_name") at 
dlsym.c:70
#8  0x0000555555555fcf in bind ()
#9  0x000055555555621c in test ()
#10 0x0000555555556313 in main ()

我尝试搜索,但找不到解决方案。我在这里缺少什么还是没有以适当的方式致电dlmopen,请在这里帮助我。任何线索或建议也将有所帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)