【发布时间】:2015-09-25 14:48:52
【问题描述】:
我的项目使用dlopen 在主线程中动态加载一个库(以调试模式编译),然后毫无问题地使用dlsym。但是,当使用 gdb 7.7.1+dfsg-5 在调试模式下运行时,它会崩溃。我从内核日志中看到这个错误:
gdb[8814]: segfault at 7fff4e019fa0 ip 0000000000718b95 sp 00007fff4e019f90 error 6 in gdb[400000+574000
这导致我无法使用调试器。太可怕了!
我能做些什么来解决这个问题?
我的项目具有这种复杂的结构。我知道它具有罕见的结构,但我被告知要使用外部库。
MAIN RUNNABLE (compiled with S1.so)
|
- SHARED_1 (S1.so) (compiled with s1.a, s2.a, s3.a)
| - STATIC_1 (s1.a)
| - dlopen S2.so and call functions from S2.so
| - STATIC_2 (s2.a)
| - STATIC_3 (s3.a)
- DYNAMICALLY_LOADING_1 (S2.so) (compiled with s1.a, s2.a, s3.a)
| - STATIC_1 (s1.a)
| - STATIC_2 (s2.a)
| - STATIC_3 (s3.a)
【问题讨论】:
-
重现问题的最小示例?
-
:( 从这么大的项目中我无法提取一些东西。
-
但是问题在于加载的共享库,因为其他库可以加载到 gdb 中。如果你没有那个库,你怎么能复制?
-
如果是公共库,请告诉我们名称、版本等。如果不是,请告诉我们如何生成具有相同问题的库。无论如何,我们需要一个最小的例子。
-
我试图给出“罕见”的结构。