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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание дистрибутива программы на QT для Mac OS  (Прочитано 6829 раз)
Serge_N
Гость
« : Май 31, 2007, 16:01 »

Я использовал qt-mac-commercial-src-4.2.2.tar.gz для установки QT.
Я скомпилировал и установил QT следующими командами:

Код:
./configure -universal -qt-libjpeg -qt-libpng
make
sudo make install


Скомпилировал свое приложение.

Благодаря информации со страницы http://doc.trolltech.com/4.2/deployment-mac.html написал и запустил скрипт для emap.app:

Код:

install_name_tool -id @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore
build/release/emap.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore
install_name_tool -id @executable_path/../Frameworks/QtGui.framework/Versions/4/QtGui
build/release/emap.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui
install_name_tool -change /usr/local/Trolltech/Qt-4.2.2/lib/QtCore.framework/Versions/4/QtCore
@executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore build/release/emap.app/Contents/MacOS/emap
install_name_tool -change /usr/local/Trolltech/Qt-4.2.2/lib/QtGui.framework/Versions/4/QtGui
@executable_path/../Frameworks/QtGui.framework/Versions/4/QtGui build/release/emap.app/Contents/MacOS/emap
install_name_tool -change /usr/local/Trolltech/Qt-4.2.2/lib/QtCore.framework/Versions/4/QtCore
@executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore build/release/emap.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui


После этого, если я удаляю с компьютера QT, программа работает.

Но если с помощью otool просмотреть, какие библиотеки нужны, получается что программе нужно еще много чего кроме QT.
И библиотеки QT сами ссылаются на другие frameworks и библиотеки системы:

Код:

my-computer:~/SVN/19 home$ otool -L ./emap.app/Contents/MacOS/emap
./emap.app/Contents/MacOS/emap:
        @executable_path/../Frameworks/QtGui.framework/Versions/4/QtGui (compatibility version 4.2.0, current version 4.2.2)
        /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 128.0.0)
        /System/Library/Frameworks/QuickTime.framework/Versions/A/QuickTime (compatibility version 1.0.0, current version 5.0.0)
        /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 824.41.0)
        @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore (compatibility version 4.2.0, current version 4.2.2)
        /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 22.0.0)
        /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.1.6)
        /usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current version 5.0.0)
        /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)

my-computer:~/SVN/19 home$ otool -L ./emap.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui
./emap.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui:
        @executable_path/../Frameworks/QtGui.framework/Versions/4/QtGui (compatibility version 4.2.0, current version 4.2.2)
        /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 128.0.0)
        /System/Library/Frameworks/QuickTime.framework/Versions/A/QuickTime (compatibility version 1.0.0, current version 5.0.0)
        /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 824.41.0)
        @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore (compatibility version 4.2.0, current version 4.2.2)
        /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.1.6)
        /usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current version 5.0.0)
        /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 22.0.0)
        /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
       
my-computer:~/SVN/19 home$ otool -L ./emap.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore
./emap.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore:
        @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore (compatibility version 4.2.0, current version 4.2.2)
        /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.1.6)
        /usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current version 5.0.0)
        /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 22.0.0)
        /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
       
my-computer:~/SVN/19 home$ otool -L ./emap.app/Contents/Plugins/imageformats/libTiffIO.dylib
./emap.app/Contents/Plugins/imageformats/libTiffIO.dylib:
        @executable_path/../Plugins/imageformats/libTiffIO.dylib (compatibility version 1.0.0, current version 1.0.0)
        @executable_path/../Frameworks/QtGui.framework/Versions/4/QtGui (compatibility version 4.2.0, current version 4.2.2)
        /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 128.0.0)
        /System/Library/Frameworks/QuickTime.framework/Versions/A/QuickTime (compatibility version 1.0.0, current version 63.0.0)
        /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 824.34.0)
        @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore (compatibility version 4.2.0, current version 4.2.2)
        /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 22.0.0)
        /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.1.3)
        /usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current version 5.0.0)
        /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
       
my-computer:~/SVN/19 home$ otool -L ./emap.app/Contents/Plugins/imageformats/libqjpeg.dylib  
./emap.app/Contents/Plugins/imageformats/libqjpeg.dylib:
        @executable_path/../Plugins/imageformats/libqjpeg.dylib (compatibility version 0.0.0, current version 0.0.0)
        @executable_path/../Frameworks/QtGui.framework/Versions/4/QtGui (compatibility version 4.2.0, current version 4.2.2)
        /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 128.0.0)
        /System/Library/Frameworks/QuickTime.framework/Versions/A/QuickTime (compatibility version 1.0.0, current version 63.0.0)
        /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 824.34.0)
        @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore (compatibility version 4.2.0, current version 4.2.2)
        /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.1.3)
        /usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current version 5.0.0)
        /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 22.0.0)
        /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)


Насколько я понимаю, если на клиентской машине будет отсутствовать одна из этих библиотек, мое приложение работать не будет

К примеру все эти библиотеки должны быть на машине клиента в таком же месте:

        /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
        /System/Library/Frameworks/QuickTime.framework/Versions/A/QuickTime
        /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
        /usr/lib/libz.1.dylib
        /usr/lib/libSystem.B.dylib
        /usr/lib/libiconv.2.dylib
        /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
        /usr/lib/libstdc++.6.dylib
        /usr/lib/libgcc_s.1.dylib

Получается, что их также нужно поместить в bundle и вызвать для них "install_name_tool -change" ?
Если их нужно включить, в какую директорию bundle я должен поместить *.dylib файлы?

И скорее всего сами эти добавляемые библиотеки ссылаются на другие в системе, которых нет в этом списке.
Нужно ли мне вызывать рекурсивно "otool -L ..." для всех библиотек и frameworks, которые добавляются в мой bundle, чтобы определить полный список всего, что нужно туда добавить?

Если это так, можно ли как-то автоматизировать этот процесс?
И в таком случае размер bundle будет за 200 мегабайт. Нормально ли такое положение дел для Mac-приложения?
Записан
Fonarix
Гость
« Ответ #1 : Июнь 14, 2007, 19:04 »

Ничего не нужно помещать и вызывать.
Любое созданное приложние использует эти СИСТЕМНЫЕ библиотеки, кроме Кт.
Несовместимость здесь возможна только из-за обратной несовместимости Осей.
Записан
bluesky123
Гость
« Ответ #2 : Июнь 15, 2007, 08:44 »

Если не секрет, а где qt-mac-commercial-src-4.2.2.tar.gz лежит?
На ундерграунде только Win и X11...

Спасибо,
Борис
Записан
yshurik
Гость
« Ответ #3 : Июнь 15, 2007, 15:35 »

собственно этот скрипт удобно ложить в pro файл под mac:release:QMAKE_POST_LINK = ...
тогда после release билда у вас готовое bundle
Записан
MIB
Гость
« Ответ #4 : Август 01, 2007, 22:14 »

Для Mac бери лучге dmg, меньше волокиты с компиляцией
http://www.trolltech.com/download?target=ftp://ftp.trolltech.com/qt/source/qt-mac-opensource-4.3.0.dmg
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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