【发布时间】:2014-03-08 01:55:25
【问题描述】:
我正在尝试使用一些 Qwt 小部件制作一个 Qt 5 应用程序,但我在尝试链接 Qwt 库时立即在 Qt 的代码中看到分段错误。我正在使用一个非常简单的 Qt 程序,它只会弹出一个空白窗口:
#include <QApplication>
#include <QWidget>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
window.resize(250, 150);
window.setWindowTitle("Simple example");
window.show();
return app.exec();
}
当我正常编译时,这工作正常。一旦我将LIBS += -lqwt 添加到我的.pro 文件中,问题就开始了。它仍然可以编译,但是当我尝试运行它时会出现分段错误,即使没有任何调用 Qwt 代码。
回溯:
Program received signal SIGSEGV, Segmentation fault.
QList (this=0x3ea60da418 <QPrinterInfoPrivate::shared_null+24>) at ../../src/corelib/tools/qlist.h:121
121 inline QList() : d(&QListData::shared_null) { d->ref.ref(); }
(gdb) bt
#0 QList (this=0x3ea60da418 <QPrinterInfoPrivate::shared_null+24>) at ../../src/corelib/tools/qlist.h:121
#1 QPrinterInfoPrivate (name=..., this=0x3ea60da400 <QPrinterInfoPrivate::shared_null>) at painting/qprinterinfo_p.h:71
#2 __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at painting/qprinterinfo.cpp:35
#3 _GLOBAL__sub_I_qprinterinfo.cpp(void) () at painting/qprinterinfo.cpp:163
#4 0x0000003e9c20f2ea in call_init (l=<optimized out>, argc=argc@entry=1, argv=argv@entry=0x7fffffffddb8, env=env@entry=0x7fffffffddc8) at dl-init.c:82
#5 0x0000003e9c20f3d3 in call_init (env=<optimized out>, argv=<optimized out>, argc=<optimized out>, l=<optimized out>) at dl-init.c:34
#6 _dl_init (main_map=0x3e9c421168, argc=1, argv=0x7fffffffddb8, env=0x7fffffffddc8) at dl-init.c:130
#7 0x0000003e9c20122a in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
如您所见,段错误发生在 Qt 的代码中,而从未到达 main.cpp 中的代码。这是什么原因造成的,我该如何解决?
我在 Fedora 20 上使用来自存储库的 Qt 5.2.0 和 Qwt 6.1.0。
【问题讨论】:
-
Qwt 6.1 是否链接到 Fedora 上的 Qt 版本 4 或 Qt 版本 5?因为这在 Arch 上对我有用。
-
ldd告诉我 repo 版本链接到libQtCore.so.4 => /lib64/libQtCore.so.4和更多的 Qt .so,但我从源代码编译的版本(使用 qmake-qt5)也是如此,那没有t似乎有同样的问题。 -
您链接到项目中的所有内容都必须使用相同的 C++ 编译器进行编译,并且必须使用相同的主要 Qt 版本。
-
有解决这个问题的建议吗?我有同样的问题:(
-
您应该使用相同的 Qt 版本编译所有包(无论您在做什么 + qwt),并链接到该版本。如果您使用 qmake-qt5 编译并且 ldd 说该库已链接到 libQtCore.so.4 则有问题。
标签: c++ qt segmentation-fault qt5 qwt