Название: как скомпилировать Отправлено: 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. |