Я использовал 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-приложения?
Ничего не нужно помещать и вызывать.
Любое созданное приложние использует эти СИСТЕМНЫЕ библиотеки, кроме Кт.
Несовместимость здесь возможна только из-за обратной несовместимости Осей.
собственно этот скрипт удобно ложить в pro файл под mac:release:QMAKE_POST_LINK = ...
тогда после release билда у вас готовое bundle