链接 Qwt 库时 Qt 代码中的分段错误
Segmentation fault in Qt code when linking Qwt libraries
我正在尝试使用一些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,两者都来自存储库。
在当前的 Fedora 23 中,您可以安装系统软件包:qwt
和 qwt-qt5
(以及这些软件包的-devel
软件包)。您可能会不小心将Qwt链接到基于Qt 5的项目,并且确实会出现分段错误,因为"qwt"包适用于Qt 4。
为了避免分段错误,您必须指定使用 Qt 5 构建的库,即在构建中指定 -lqwt-qt5,而不是 -lqwt 。
例如,在我的 .pro 文件中:
unix|win32: LIBS += -lqwt-qt5
这将解决问题。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?