2014-02-10 3 views
4

Я пытаюсь сделать приложение Qt   5 с несколькими виджетами Qwt, но я вижу ошибку сегментации в коде Qt, как только я попытаюсь связать библиотеки Qwt. Я использую очень простой Qt программу, которая только выскакивает пустое окно:Ошибка сегментации в Qt-коде при связывании библиотек Qwt

#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.

Backtrace:

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. Что вызывает это, и как его исправить?

Я использую Qt 5.2.0 и Qwt 6.1.0 на Fedora 20, как из хранилищ.

+1

Qwt 6.1 связан с Qt версии 4 или Qt версии 5 на Fedora? Потому что это работает для меня на Arch. – rubenvb

+1

'ldd' сообщает мне, что версия репо связана с' libQtCore.so.4 =>/lib64/libQtCore.so.4' и еще несколькими Qt .so, но версия, скомпилированная из исходного кода (с использованием qmake-qt5) тоже, и это не похоже на ту же проблему. – monkeypants

+1

Все, что вы связываете с вашим проектом, должно быть скомпилировано с использованием того же компилятора C++ и должна использовать ту же самую основную версию Qt. –

ответ

0

В текущей версии Fedora 23 вы можете установить системные пакеты: qwt и qwt-qt5 (плюс -devel). Вы можете случайно связать QWT с   проекта 5 на основе Qt и действительно получить ошибку сегментации, так как пакет «QWT» для Qt   4.

Для того, чтобы избежать ошибки сегментации, необходимо указать библиотеку, построен с Qt   5, то есть -lqwt-qt5 в вашей сборке, а не -lqwt.

E.g. в моем файле .pro:

unix|win32: LIBS += -lqwt-qt5 

Это решает проблему.

Смежные вопросы