【发布时间】:2016-04-19 17:45:26
【问题描述】:
我正在做一个项目,但我遇到了一个我不知道如何处理的问题。
我编译项目时没有问题,但是在执行时,我什至无法进入main()函数......在进入main()之前它崩溃了。这是堆栈:
#0 0x00007ffff2859cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1 0x00007ffff285d0d8 in __GI_abort () at abort.c:89
#2 0x00007ffff2896394 in __libc_message (do_abort=do_abort@entry=1, fmt=fmt@entry=0x7ffff29a4b28 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175
#3 0x00007ffff28a10f7 in malloc_printerr (action=<optimized out>, str=0x7ffff29a0d5d "realloc(): invalid pointer", ptr=<optimized out>) at malloc.c:4996
#4 0x00007ffff28a6192 in __GI___libc_realloc (oldmem=0x7ffff58fb840 <QListData::shared_null>, bytes=32) at malloc.c:2986
#5 0x00007ffff31f5e3e in QListData::realloc(int) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6 0x00007ffff31f5efa in QListData::append(int) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#7 0x00007ffff32e2d8c in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#8 0x00007ffff32dee29 in qRegisterResourceData(int, unsigned char const*, unsigned char const*, unsigned char const*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#9 0x00007ffff3181eb3 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#10 0x00007ffff7dea13a in call_init (l=<optimized out>, argc=argc@entry=1, argv=argv@entry=0x7fffffffdfc8, env=env@entry=0x7fffffffdfd8) at dl-init.c:78
#11 0x00007ffff7dea223 in call_init (env=<optimized out>, argv=<optimized out>, argc=<optimized out>, l=<optimized out>) at dl-init.c:36
#12 _dl_init (main_map=0x7ffff7ffe1c8, argc=1, argv=0x7fffffffdfc8, env=0x7fffffffdfd8) at dl-init.c:126
#13 0x00007ffff7ddb30a in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#14 0x0000000000000001 in ?? ()
#15 0x00007fffffffe32c in ?? ()
#16 0x0000000000000000 in ?? ()
我已经测试了一些东西:使用Qt5(更具体地说是Qt5Widgets)创建一个小程序,没有问题(无论是在编译还是执行时)... 我将 gcc 和 g++ 升级到 4.9 版。 还从所有我们不使用的依赖项中清除了代码,但没有任何进展的迹象..
最奇怪的是,我的队友都没有遇到这个问题,而当我从 Windows 的 Virtual box 中使用 Ubuntu 时,甚至没有出现这个问题。
我正在开发 Linux Mint 17.3 Rosa。
【问题讨论】:
-
你能至少显示来自
dl_init.c的call_init()吗? -
@MichaelBurr 这几乎肯定是 glibc 内部的。加载动态库时,qt 似乎搞砸了。 sourceware.org/git/?p=glibc.git;a=blob_plain;f=elf/dl-init.c
-
听起来像是静态初始化命令惨败的例子。
-
你有Qt类型的静态变量吗?