Russian Qt Forum
Ноябрь 24, 2024, 02:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: не работает qt-эшное приложение  (Прочитано 12447 раз)
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« : Октябрь 26, 2009, 16:16 »

Собрал свежую Qt4.5.3 из исходников с ключами
Код:
./configure -prefix /usr/local/Trolltech/Qt4-5.3-static \
            -debug -static -no-qt3support -no-phonon -no-webkit -cups

Собрал приложение с помощью /usr/local/Trolltech/Qt4-5.3-static/bin/qmake. Приложение собралось без ошибок.
Запускаю, получаю ошибку
Код:
# ./myProg
./myProg: error while loading shared libraries: libQtSvg.so.4: cannot open shared object file: No such file or directory

Что за libQtSvg.so.4? У меня программа собрана со статическими библиотеками. Какие ещё нужны библиотеки? Кто-нибудь может подсказать - в чем дело?

ps Как только nokia стала управлять Qt, так с qt какие-то траблы начались. и sdk кривой и из исходников как-то криво всё идет. до нокии подобных проблем не было ((
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Октябрь 26, 2009, 17:25 »

Попробуй скомпилить с опцией -no-svg.

Кстати, кто использует самостоятельную сборку под Линухой? Раньше у меня могло работать вместе несколько версий Qt, а теперь только та, которая из репозитария. Сейчас приложения выдают вот такую фигню:
Код:
Cannot mix incompatible Qt libraries
Аварийный останов
Причем не все приложения, а только те, которые используют плагины. Т.е. Лингвист и ассистент запускаются, а креатор и дизайнер нет.
« Последнее редактирование: Октябрь 26, 2009, 17:30 от panter_dsd » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #2 : Октябрь 27, 2009, 06:25 »

Цитировать
Попробуй скомпилить с опцией -no-svg.
Я в своей программе использую QGraphicsSvgItem и в QRenderer гружу svg файлы. Без svg ни как.

Цитировать
Раньше у меня могло работать вместе несколько версий Qt. Раньше у меня могло работать вместе несколько версий Qt
Я использую самостоятельную. И под FreeBSD и под Линукс. Что значит "могло работать...Qt"? Асистент что ли? У меня до версии 4.3 (или 4.4) мои программы собирались, запускались и работали. Так же работали асистент, дезайнер, лингвист и демо. Начиная с версии 4.4 под FreeBSD перестал работать асистент и демо, a мои программы собирались и работали. Перешёл на линукс, т.к. 4.5.* под фри нокия не делает. Асистент собранный руками не работает. В линуксе асистент установленный из бинарника работает.
Записан
Rcus
Гость
« Ответ #3 : Октябрь 27, 2009, 06:31 »

Ну дык это... мейкфайлы же есть, g++ -v на крайний случай есть - всегда можно узнать что с чем слинковалось
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #4 : Октябрь 27, 2009, 07:00 »

Ну дык это... мейкфайлы же есть, g++ -v на крайний случай есть - всегда можно узнать что с чем слинковалось
эээээ,,,,, не понял,,,,,,,,, какие мейкфайлы? сборка qt? или сборка моей программы? Просмотрел их,,,,,, что там можно увидеть? могу закинуть в студию
Записан
Rcus
Гость
« Ответ #5 : Октябрь 27, 2009, 07:37 »

В мейкфайлах для сборки приложения можно точно узнать какие ключи передаются компилятору. Добавление ключа -v (вроде именно так) заставляет gcc показывать детальные логи, в том числе полные пути файлов при компоновке.
Записан
shadone
Гость
« Ответ #6 : Октябрь 27, 2009, 13:34 »

похоже что приложение не собрано статически.
проверить это можно с помощью команды file и ldd:
Код:
file ./myProg
Код:
ldd ./myProg
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Октябрь 27, 2009, 17:35 »

Вот мой вывод ldd /opt/qt/4.6.0/bin/designer
Код:
        linux-vdso.so.1 =>  (0x00007fff56f09000)
        libQtDesignerComponents.so.4 => /opt/qt/4.6.0/lib/libQtDesignerComponents.so.4 (0x00007f886b9f9000)
        libQtDesigner.so.4 => /opt/qt/4.6.0/lib/libQtDesigner.so.4 (0x00007f886b0d6000)
        libQtScript.so.4 => /opt/qt/4.6.0/lib/libQtScript.so.4 (0x00007f886acdf000)
        libQtXml.so.4 => /opt/qt/4.6.0/lib/libQtXml.so.4 (0x00007f886aa96000)
        libQtGui.so.4 => /opt/qt/4.6.0/lib/libQtGui.so.4 (0x00007f8869e01000)
        libQtNetwork.so.4 => /opt/qt/4.6.0/lib/libQtNetwork.so.4 (0x00007f8869ad6000)
        libQtCore.so.4 => /opt/qt/4.6.0/lib/libQtCore.so.4 (0x00007f8869648000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00007f886942c000)
        libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.2/libstdc++.so.6 (0x00007f886911e000)
        libm.so.6 => /lib/libm.so.6 (0x00007f8868e9c000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f8868c85000)
        libc.so.6 => /lib/libc.so.6 (0x00007f886892f000)
        libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0x00007f886872a000)
        librt.so.1 => /lib/librt.so.1 (0x00007f8868521000)
        libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007f8868242000)
        libpng12.so.0 => /usr/lib/libpng12.so.0 (0x00007f886801c000)
        libz.so.1 => /lib/libz.so.1 (0x00007f8867e06000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00007f8867b70000)
        libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x00007f886792b000)
        libSM.so.6 => /usr/lib/libSM.so.6 (0x00007f8867722000)
        libICE.so.6 => /usr/lib/libICE.so.6 (0x00007f8867505000)
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00007f88672fb000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00007f88670c6000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0x00007f8866eb3000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f8866b7b000)
        libdl.so.2 => /lib/libdl.so.2 (0x00007f8866977000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f886beb9000)
        libuuid.so.1 => /lib/libuuid.so.1 (0x00007f8866772000)
        libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00007f8866549000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f886632b000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f8866125000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f8865f21000)
Qt конфигурилась с такими опциями:
Код:
./configure \
-prefix /opt/qt/4.6.0 \
-opensource \
-qt-sql-psql \
-verbose \
-nomake examples \
-nomake demos
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
shadone
Гость
« Ответ #8 : Октябрь 27, 2009, 18:45 »

я вообще отвечал автору оригинального сообщения - juvf.

Вот мой вывод ldd /opt/qt/4.6.0/bin/designer

Qt конфигурилась с такими опциями:
Код:
./configure \
-prefix /opt/qt/4.6.0 \
-opensource \
-qt-sql-psql \
-verbose \
-nomake examples \
-nomake demos

это другая проблема. нельзя смешивать библиотеки Qt разных версий. Используй LD_LIBRARY_PATH и qt.conf для указание пути до плагинов. Также надо заглянуть в ~/.config/Trolltech.conf и убедиться что там не указаны неправильные пути до плагинов.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Октябрь 27, 2009, 18:49 »

нельзя смешивать библиотеки Qt разных версий.
Жаль, а раньше можно было. Грустный Спасибо за объяснение, а то я грешил на кривые руки.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
shadone
Гость
« Ответ #10 : Октябрь 27, 2009, 19:36 »

нельзя смешивать библиотеки Qt разных версий.
Жаль, а раньше можно было. Грустный Спасибо за объяснение, а то я грешил на кривые руки.
никогда нельзя было. Такая проверка на версию библлиотеки имеется в Qt как минимум с 2003 года.
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #11 : Октябрь 30, 2009, 14:36 »

Меня эта проблема совсем устала. В день по 20 раз компиляю разные qt. исследую.

скачал последний Qt4.5.3. Собираю из исходников с опциями
Код:
./configure -static -silent -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 -no-sql-db2 -no-sql-ibase \
    -no-sql-mysql -no-sql-oci -no-sql-odbc -no-sql-tds -no-qt3support -no-phonon \
    -no-phonon-backend -no-webkit -nomake tools -nomake examples -nomake docs \
    -nomake demos -prefix /usr/local/Trolltech/Qt4.5.3-static

после собираю своё приложение с использованием  /usr/local/Trolltech/Qt4.5.3-static/bin/qmake. Запускаю ./myProg - получаю "libQtSvg.so.4: cannot open shared object file:" вот вывод file и ldd
Код:
juvf@juvf:~/work/prog/trunk/bin$ file ./prog
./nova: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
juvf@juvf:~/work/prog/trunk/bin$ ldd ./prog
        linux-gate.so.1 =>  (0xb7f77000)
        libQtSvg.so.4 => not found
        libQtXml.so.4 => /usr/lib/libQtXml.so.4 (0xb7f1f000)
        libQtGui.so.4 => /usr/lib/libQtGui.so.4 (0xb761f000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0xb7611000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xb7522000)
        libQtNetwork.so.4 => /usr/lib/libQtNetwork.so.4 (0xb7423000)
        libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0xb71f7000)
        libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb71f2000)
        librt.so.1 => /lib/i686/cmov/librt.so.1 (0xb71e8000)
        libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb7133000)
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb712f000)
        libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7116000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7028000)
        libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7002000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb6ff4000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb6e99000)
        libaudio.so.2 => /usr/lib/libaudio.so.2 (0xb6e83000)
        libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb6e5f000)
        libSM.so.6 => /usr/lib/libSM.so.6 (0xb6e57000)
        libICE.so.6 => /usr/lib/libICE.so.6 (0xb6e40000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb6e2a000)
        libXi.so.6 => /usr/lib/libXi.so.6 (0xb6e22000)
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb6e19000)
        libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xb6e13000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb6d9e000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb6d73000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0xb6d6f000)
        libxcb-xlib.so.0 => /usr/lib/libxcb-xlib.so.0 (0xb6d6d000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb6d55000)
        /lib/ld-linux.so.2 (0xb7f78000)
        libpcre.so.3 => /usr/lib/libpcre.so.3 (0xb6d2c000)
        libXt.so.6 => /usr/lib/libXt.so.6 (0xb6cdc000)
        libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb6cb5000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb6cb0000)
juvf@juvf:~/work/prog/trunk/bin$

У колеги qt установленно из sdk.bin. Т.е. у него собирается без статических библиотек. у него ldd показывает
Код:
        libQtSvg.so.4 => /opt/qtsdk-2009.03/qt/lib/libQtSvn.so.4 (...)
        libQtXml.so.4 =>  /opt/qtsdk-2009.03/qt/lib/libQtXml.so.4 (0xb7f1f000)
        libQtGui.so.4 => /opt/qtsdk-2009.03/qt/lib/libQtGui.so.4 (0xb761f000)
т.е. у него qt-эшные библиотеки берутся от туда, куда qt установлен. Я пробывал ставить qt и из бинарника, и из исходников, с разными опциями - у меня всегда в выводе ldd ./prog
Код:
        libQtSvg.so.4 => not found
        libQtXml.so.4 => /usr/lib/libQtXml.so.4 (0xb7f1f000)
        libQtGui.so.4 => /usr/lib/libQtGui.so.4 (0xb761f000)
почему-то моё приложение всегда собирается с без статики. Более того библиотеки подгружаются не от туда, куда я установил Qt, а из /usr/lib/. Почему? 

ps Раньше было всё нормально. Поигрался с программами из репов в debian. Возможно какой-нибудь компонент удалил из системы. А какой??? Как бы понять, почему qtmake собирает приложение, не используя свои библиотеки, а пользует из  /usr/lib? Почему статически не собирает программы? Может qt собирается не правильно? а как понять где грабля?
Записан
Rcus
Гость
« Ответ #12 : Октябрь 30, 2009, 17:19 »

Меня эта проблема совсем устала. В день по 20 раз компиляю разные qt. исследую.
Не надо пересобирать просто потому что вы это можете. Я уже советовал вам посмотреть мейкфайлы. Еще есть команда qmake -query, но если вместо нее еще раз перекомпилировать Qt то лучше не станет Улыбающийся
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #13 : Ноябрь 05, 2009, 14:29 »

Цитировать
Я уже советовал вам посмотреть мейкфайлы.
Мэйкфайлы ни чего толкового не сказали не сказали. Проблему решил. Всем спасибо!

Решил проблему следующим образом: на др. машине (с мандривой) собрал qt из исходников. собрал приложение. Заработало. Перетащил Makefile для своей проги на свою эвм. Прога собралась, но работает криво. Перетащил собранное Qt на свою эвм и попытался собрать прогу с использование Qt собранной на др. машине (с мандривой). При линковке получил сообщения о недостающих библиотеках. Доставил пакеты с этими бибилиотеками

libpng12-dev
libfreetype-dev
libsm-dev
libxrender-dev
libfontconfig1-dev
libxext-dev
libglib2.0-dev

После этого прога заработала как надо. Но после сборки моей программы с помощью Qt, собранной на моей машине (до того как были установлены библиотеки) - прога не работала. Пересобрал заново Qt на своей машине - и всё заработало как надо. Очевидно если Qt было собрано без вышеуказанных библиотек в системе, то потом программы почему-то собирается на этом Qt и работают криво.

ps нудно как-то!? извините, но по крайней меня для меня подсказка будет на будущее
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.265 секунд. Запросов: 23.