4
我試圖用一些Qwt小部件創建一個Qt 應用程序,但是當我嘗試鏈接Qwt庫時,我發現Qt代碼中存在分段錯誤。我使用的是非常簡單的Qt程序,只彈出一個空白窗口:連接Qwt庫時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>, [email protected]=1, [email protected]=0x7fffffffddb8, [email protected]=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上適合我。 – rubenvb
'ldd'告訴我repo版本鏈接到'libQtCore.so.4 =>/lib64/libQtCore.so.4'和幾個Qt .so,但是我從源代碼編譯的版本(使用qmake-qt5)也是,而且似乎也沒有同樣的問題。 – monkeypants
您鏈接到項目中的所有內容必須使用相同的C++編譯器進行編譯,並且必須使用相同的主要Qt版本。 –