关于dlopen的问题

中文QNX 讨论: 欢迎大家灌水,讨论有关QNX 问题。
回复
kja23
New Member
帖子: 1
注册时间: 周五 3月 15, 2019 4:55 pm

关于dlopen的问题

帖子 kja23 » 周五 3月 15, 2019 5:05 pm

我用QNX交叉编译了一个动态库,在程序中dlopen动态库的时候,程序崩溃了。用GDB调试时,发现没有提供有用的信息,只是提示堆栈损坏。
程序如下:
#include <cstdlib>
#include <iostream>
#include <dlfcn.h>

int main(int argc, char *argv[]) {
using std::cout;
using std::endl;
void *handle = NULL;

if((handle = dlopen(argv[1], RTLD_LAZY | RTLD_GLOBAL)) == NULL) {
cout <<"dlopen" << argv[1] << "error- " << dlerror() << endl;
exit(-1);
}
cout <<"dlopen" << argv[1] << "ok" << endl;
return 0;
}
执行命令test libplanning_component.so,提示信息如下:
# ./testdlopen libplanning_component.so
libs: load_object: attempt load of /proc/boot/libstringsa64.so
libs: /proc/boot/libstringsa64.so: found; real path:/proc/boot/libstringsa64.so.1
libs: load_elf: Shared library base: 0x78000000
libs: load_elf: libstringsa64.so relro segment is now lazy mapping; 78011000-78012000
libs: load_elf: loaded lib at addr 78000000(text) 78011dd0(data)
libs: object /proc/boot/libstringsa64.so loaded; real soname: libstringsa64.so.1 loaded from: /proc/boot/libstringsa64.so.1
libs: load_object: attempt load of libc++.so.1
libs: /lib/libc++.so.1: found; real path:/lib/libc++.so.1
libs: load_elf: Shared library base: 0x78013000
libs: load_elf: libc++.so.1 relro segment is now lazy mapping; 780f7000-780ff000
libs: load_elf: loaded lib at addr 78013000(text) 780f78a0(data)
libs: object libc++.so.1 loaded; real soname: libc++.so.1 loaded from: /lib/libc++.so.1
libs: load_object: attempt load of libm.so.3
libs: /proc/boot/libm.so.3: found; real path:/proc/boot/libm.so.3
libs: load_elf: Shared library base: 0x78102000
libs: load_elf: libm.so.3 relro segment is now lazy mapping; 7814a000-7814b000
libs: load_elf: loaded lib at addr 78102000(text) 7814a8b0(data)
libs: object libm.so.3 loaded; real soname: libm.so.3 loaded from: /proc/boot/libm.so.3

libs: init: libc.so.4 obj->refcount: 1
libs: init: libm.so.3 obj->refcount: 1
libs: init: libc++.so.1 obj->refcount: 1
libs: init: libstringsa64.so.1 obj->refcount: 1
libs: dlopen("libplanning_component.so",257)
Mode: LAZY GLOBAL

libs: Neither RTLD_GROUP nor RTLD_WORLD specified, assuming RTLD_GROUP | RTLD_WORLD
libs: load_object: attempt load of libplanning_component.so
libs: libplanning_component.so: found; real path:/apollo/libplanning_component.so
libs: load_elf: Shared library base: 0x7814c000
libs: load_elf: libplanning_component.so relro segment is now lazy mapping; 783b2000-783bb000
libs: load_elf: loaded lib at addr 7814c000(text) 783b2408(data)

Process 876567 (testdlopen) terminated SIGSEGV code=1 fltno=11 ip=0000000001056bf4(/usr/lib/ldqnx-64.so.2@dlopen+0x0000000000001834) mapaddr=0000000000056bf4. ref=b400108c7c184c00
Memory fault (core dumped)
请高人提示这个问题应该怎么查?

supercell1
New Member
帖子: 2
注册时间: 周六 7月 27, 2019 10:57 pm

Re: 关于dlopen的问题

帖子 supercell1 » 周一 8月 12, 2019 11:29 pm

你删除了数据吗?或病毒吃文件
导致它被病毒破坏尝试重新安装。
你能看到吗?如果没有,你试图看到病毒。
为了什么会更好或者尝试修复该文件

这很容易,因为文件如果是老式的,不会被损坏。
一定要试着看看你做了什么
文件有这个问题。试着好好想一想。首先尝试这种方法。
为了帮助解决问题试着把它看出来。
一点一点地学习我们会对自己更好。这没什么。
哪个比我们的能力更难不要相信它
https://starvegasgame.com/ป๊อกเด้งออนไลน์-ป๊อก-9/

回复