问题描述
我在dlmopen中遇到问题,但是我已经在我的cpp程序中(在Linux中)成功使用了 dlopen 和 dlsym
void *lib_handle = dlopen(lib_path,RTLD_Now);
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(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 (将#修改为@)