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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: как скомпилировать  (Прочитано 10543 раз)
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
Гость
« Ответ #1 : Октябрь 18, 2006, 15:42 »

1. Лучше тащить вместе с либами, особенно, если исполняемых файло несколько.
2. Да, надо под виндой заводить (MinGW) или Commercial.
Записан
Ankor
Гость
« Ответ #2 : Октябрь 18, 2006, 18:40 »

Нужно скомпилировать со статическими библиотеками. В .pro-файле добавить строчку CONFIG += static. Но необходимо, чтобы qt имела статическую бибилиотеку libqt-mt.a.
Записан
bigirbis
Гость
« Ответ #3 : Октябрь 19, 2006, 09:01 »

Все хорошо, но если это группа приложений...
А под виндой (если не под MinGW, а под VS собиралось) еще и VS либы тащить придетсяю
Записан
nkly777
Гость
« Ответ #4 : Октябрь 19, 2006, 09:28 »

Цитата: "Ankor"
Но необходимо, чтобы qt имела статическую бибилиотеку libqt-mt.a.

А если нет libqt-mt.a а есть libqt-mt.so.3 то где взять libqt-mt.a?
Записан
bigirbis
Гость
« Ответ #5 : Октябрь 19, 2006, 10:13 »

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

Собрать из исходников Qt, добавив флаг при конфигурировании -static
Записан
nkly777
Гость
« Ответ #6 : Октябрь 19, 2006, 12:12 »

Цитата: "bigirbis"

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

А если мне нужно одно приложение с динамическими библиотеками а другое со статическими, то что каждый раз пересобиратьQt?
Записан
Вудруф
Гость
« Ответ #7 : Октябрь 19, 2006, 12:27 »

Собрать две версии и менять %QTDIR% не подходит?
Записан
bigirbis
Гость
« Ответ #8 : Октябрь 19, 2006, 13:07 »

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

Смысл?
Просто во время инстала кидай Qt либы в usr
Записан
nkly777
Гость
« Ответ #9 : Октябрь 19, 2006, 13:47 »

Цитата: "bigirbis"
Просто во время инстала кидай Qt либы в usr

Простите но я не понял что означает данная фраза. Поясните пожалуйста. А что касается предложения пересборки Qt то что то здесь не так. Я думаю серьезная среда разработки (к которым относится Qt) должна предоставлять программисту выбор какие библиотеки он хочет использовать без пересборки Qt.
Записан
Dair
Гость
« Ответ #10 : Октябрь 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
Гость
« Ответ #11 : Октябрь 19, 2006, 14:39 »

Цитировать
bigirbis писал(а):
Цитировать
Просто во время инстала кидай Qt либы в usr


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

Под Linux скидывай во время установки либы в /usr/lib
Под Виндой в $(SystemRoot)/system32
Записан
Alex03
Гость
« Ответ #12 : Октябрь 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
Записан
Вудруф
Гость
« Ответ #13 : Октябрь 20, 2006, 07:19 »

Интересно. Кто попробует - скажите, а то я до следующей версии перекомпилировать не буду, а здесь уже всё лишнее потёр Улыбающийся
Записан
nkly777
Гость
« Ответ #14 : Октябрь 20, 2006, 10:04 »

Сформулирую свой вопрос иначе:
Я делаю приложение клиент-сервер на основе примера приведенного в мануале к Qt.
Должно быть порядка 10 программ серверов работающих на Linux и примерно 25-30 клиентов работающих под windows. Естественно компьютеры будут все разные. Как мне сделать чтобы программы запускались без особых проблем (а лучше конечно совсем без проблем) на разных версиях Windows и Linux? Хотя linux можно будет привести к единому варианту.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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