Скрипт для исправления бинарных файлов Qt после перемещения на Mac OSX

Я строю QT 5 из источника. Мне интересно, как проще всего скопировать и вставить двоичные файлы qt под MacOS. Если вы запустите otool на любой из платформ qt, вы увидите, что все зависимости используют абсолютные пути:

    bash-3.2$ otool -L QtWidgets 
QtWidgets:
    /Users/../Qt/qt5/qtbase/lib/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.1.0, current version 5.1.1)
    /Users/../Qt/qt5/qtbase/lib/QtGui.framework/Versions/5/QtGui (compatibility version 5.1.0, current version 5.1.1)
    /Users/../Qt/qt5/qtbase/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.1.0, current version 5.1.1)
    /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 155.0.0)
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 19.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 744.18.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 945.16.0)
    /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 45.0.0)
    /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1187.37.0)

Когда я копирую двоичные файлы qt и связываю свое приложение с этой копией, это работает, но некоторые зависимые структуры берутся из старого места. Все становится еще хуже, когда я пытаюсь переместить двоичные файлы на другую машину. Я знаю, что проблемы могут быть исправлены с помощью install_name_tool, но это много подвержено ошибкам ручной работы. Мне интересно, есть ли сценарий, который мог бы помочь мне в этом?

2 ответа

Решение

После долгих поисков в интернете. Я обнаружил, что Qt Installer Framework имеет необходимый код для исправления перемещенных двоичных файлов Qt под Mac OSX. Была небольшая проблема с выполнением этого кода, он написан на C++, который было не так просто скомпилировать, так как он зависит от Qt4, пока я использую Qt5.1. К счастью, оказалось, что все операции доступны через командную строку. Чтобы использовать эти команды, вам нужен любой установщик, созданный с помощью Qt Installer Framework (бинарный установщик Qt для Mac OSX достаточно хорош), и используйте команду ниже:

./qt-mac-opensource-5.1.0-clang-offline.app/Contents/MacOS/qt-mac-opensource-5.1.0-clang-offline --runoperation "QtPatch" "mac"
"/Path/to/Qt/binaries/which/need/to/be/patched" "qt5"
========================================
Operation was successfully performed.

Если вы получаете сообщение об ошибке "qmake - это не программа" или что-то в этом роде, попробуйте chmod qmake:

chmod 777 qmake

Примечание: это работает с любым установщиком QtIFW. Поиграйте с готовой версией QtIFW

Хорошо, вот и все, это самый прямой путь, который я нашел до сих пор.

В любом случае, если вы собираете QT5 из исходного кода, статическое связывание решит некоторые ваши головные боли.

Оригинальная ссылка в списке сломалась.

Чтобы построить QT статически добавить -static к аргументам при запуске./configure например

./configure -prefix /Developer/qt -qt-zlib -qt-libpng -qt-libjpeg -universal -sdk /Developer/SDKs/MacOSX10.4u.sdk -static -release

Компилировать с: make sub-src

Установить с помощью: sudo make install

Другие вопросы по тегам