Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: nkly777 от Октября 18, 2006, 15:33



Название: как скомпилировать
Отправлено: nkly777 от Октября 18, 2006, 15:33
Использую qt 3.3.4 на LINUXe
Написал приложение. Как описано в мануале все сделал:
qmake -o Makefile app.pro
make
Все нормально, приложение работает.
Переписал получившийся файл на другой компьютер с LINUX и попробовал запустить. Выдало ошибку:

./app: error while loading shared libraries: libqt-mt.so.3: cannot open shared object file: No such file or directory

Как я понял приложение скомпилировано под использование динамических библиотек.
Вопрос:
Как скомпилировать приложение чтобы оно работало на любой системе (то есть чтобы все необходимое для работы приложения было включено в него)?
Вопрос второй:
Мне нужно также скомпилировать еще одно приложение чтобы оно работало под windows,
можно ли скомпилировать его из LINUX или нужно устанавливать QT на Windows и там компилировать?
Может кто расскажет поподробнее про все это, или ссылочку даст где почитать?


Название: как скомпилировать
Отправлено: bigirbis от Октября 18, 2006, 15:42
1. Лучше тащить вместе с либами, особенно, если исполняемых файло несколько.
2. Да, надо под виндой заводить (MinGW) или Commercial.


Название: как скомпилировать
Отправлено: Ankor от Октября 18, 2006, 18:40
Нужно скомпилировать со статическими библиотеками. В .pro-файле добавить строчку CONFIG += static. Но необходимо, чтобы qt имела статическую бибилиотеку libqt-mt.a.


Название: как скомпилировать
Отправлено: bigirbis от Октября 19, 2006, 09:01
Все хорошо, но если это группа приложений...
А под виндой (если не под MinGW, а под VS собиралось) еще и VS либы тащить придетсяю


Название: как скомпилировать
Отправлено: nkly777 от Октября 19, 2006, 09:28
Цитата: "Ankor"
Но необходимо, чтобы qt имела статическую бибилиотеку libqt-mt.a.

А если нет libqt-mt.a а есть libqt-mt.so.3 то где взять libqt-mt.a?


Название: как скомпилировать
Отправлено: bigirbis от Октября 19, 2006, 10:13
Цитировать
А если нет libqt-mt.a а есть libqt-mt.so.3 то где взять libqt-mt.a?

Собрать из исходников Qt, добавив флаг при конфигурировании -static


Название: как скомпилировать
Отправлено: nkly777 от Октября 19, 2006, 12:12
Цитата: "bigirbis"

Собрать из исходников Qt, добавив флаг при конфигурировании -static

А если мне нужно одно приложение с динамическими библиотеками а другое со статическими, то что каждый раз пересобиратьQt?


Название: как скомпилировать
Отправлено: Вудруф от Октября 19, 2006, 12:27
Собрать две версии и менять %QTDIR% не подходит?


Название: как скомпилировать
Отправлено: bigirbis от Октября 19, 2006, 13:07
Цитировать
А если мне нужно одно приложение с динамическими библиотеками а другое со статическими, то что каждый раз пересобиратьQt?

Смысл?
Просто во время инстала кидай Qt либы в usr


Название: как скомпилировать
Отправлено: nkly777 от Октября 19, 2006, 13:47
Цитата: "bigirbis"
Просто во время инстала кидай Qt либы в usr

Простите но я не понял что означает данная фраза. Поясните пожалуйста. А что касается предложения пересборки Qt то что то здесь не так. Я думаю серьезная среда разработки (к которым относится Qt) должна предоставлять программисту выбор какие библиотеки он хочет использовать без пересборки Qt.


Название: Re: как скомпилировать
Отправлено: Dair от Октября 19, 2006, 14:03
Цитата: "nkly777"
Использую qt 3.3.4 на LINUXe
./app: error while loading shared libraries: libqt-mt.so.3: cannot open shared object file: No such file or directory

Как я понял приложение скомпилировано под использование динамических библиотек.
Вопрос:
Как скомпилировать приложение чтобы оно работало на любой системе (то есть чтобы все необходимое для работы приложения было включено в него)?


Плохая идея. представь, что у тебя завтра будет два (три, двадцать восемь) Qt-based приложений. Ты будешь вместе с ними ставить 28 копий Qt?.. А зачем, если можно поставить одну?

Под большинство дистрибутивов linux Qt, afaik, собрана в пакеты (например, под debian пакет libqt3-mt). Твоя программа должна собираться в пакет и устанавливать зависимость себя от Qt.


Название: как скомпилировать
Отправлено: bigirbis от Октября 19, 2006, 14:39
Цитировать
bigirbis писал(а):
Цитировать
Просто во время инстала кидай Qt либы в usr


Простите но я не понял что означает данная фраза. Поясните пожалуйста.

Под Linux скидывай во время установки либы в /usr/lib
Под Виндой в $(SystemRoot)/system32


Название: как скомпилировать
Отправлено: Alex03 от Октября 20, 2006, 07:07
Цитата: "bigirbis"
Цитировать
А если нет libqt-mt.a а есть libqt-mt.so.3 то где взять libqt-mt.a?

Собрать из исходников Qt, добавив флаг при конфигурировании -static


Можно проще.
Если дерево исходников есть и уже компилялась *.so то достаточно
make staticlib. (или cd src ; make staticlib - не помню точно)
При этом линковка занимает пару секунд.

По крайней мере в qt3


Название: как скомпилировать
Отправлено: Вудруф от Октября 20, 2006, 07:19
Интересно. Кто попробует - скажите, а то я до следующей версии перекомпилировать не буду, а здесь уже всё лишнее потёр :)


Название: как скомпилировать
Отправлено: nkly777 от Октября 20, 2006, 10:04
Сформулирую свой вопрос иначе:
Я делаю приложение клиент-сервер на основе примера приведенного в мануале к Qt.
Должно быть порядка 10 программ серверов работающих на Linux и примерно 25-30 клиентов работающих под windows. Естественно компьютеры будут все разные. Как мне сделать чтобы программы запускались без особых проблем (а лучше конечно совсем без проблем) на разных версиях Windows и Linux? Хотя linux можно будет привести к единому варианту.


Название: как скомпилировать
Отправлено: bigirbis от Октября 20, 2006, 10:07
Просто при сборке пакета пихай туда динамические либы, а потом раскидывай их по стандартным каталогам. Это стандартный вариант. Он, кстати, в ассистанте описан.


Название: как скомпилировать
Отправлено: Alex03 от Октября 20, 2006, 12:01
Под виндой можно хранить и в каталоге откуда запускается прога.
Но там есть различия в порядке поиска DLL в 9х и в NT...

Под разными дистрибутивами линуксов лучше брать их родные qt*.so
Иначе возможны конфликты с либами которые тащит уже qt.
Или конфигурять qt по минимуму чтобы не тащить всякие libICE libXSession и им подобные которых может не быть на другой машине, а порой вообще проблемы уже с версией libstdc++.

В общем в ряде случаев и статическая линковка полезна, только в этом случае надо qt компилять по минимуму под приложение.


Название: как скомпилировать
Отправлено: bigirbis от Октября 20, 2006, 14:20
Что касается версий, можно следовать 2 путями:
1. Использовать макрос QT_VERSION
2. Тащить с собой либы; инсталлировать их в случае такой необходимости в к-л каталоги; если нужно, прописывать libraryPath.