osx - How to deploy a Qt application on Mac OS X using install_name_tool? -


i having problems packaging qt app mac os x.

i've read documentation on deploying application on mac os x i'm still not sure i'm doing wrong.

on mac, have qt5 installed on ~/qt5.1.0/5.1.0/clang_64 (this bin/ , lib/ folder resides)

i have qt application called "renamer" on ~/documents/qtprojects/renamer/.

using qt creator, have built release version of application on ~/documents/qtprojects/build-renamer-desktop_qt_5_1_0_clang_64bit-release. first thing did run otool on application:

$ cd ~/documents/qtprojects/build-renamer-desktop_qt_5_1_0_clang_64bit-release $ otool -l renamer.app/contents/macos/renamer 

here result:

renamer.app/contents/macos/renamer:     /users/paul/qt5.1.0//5.1.0/clang_64/lib/qtwidgets.framework/versions/5/qtwidgets (compatibility version 5.1.0, current version 5.1.0)     /users/paul/qt5.1.0//5.1.0/clang_64/lib/qtgui.framework/versions/5/qtgui (compatibility version 5.1.0, current version 5.1.0)     /users/paul/qt5.1.0//5.1.0/clang_64/lib/qtcore.framework/versions/5/qtcore (compatibility version 5.1.0, current version 5.1.0)     /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/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)     /usr/lib/libsystem.b.dylib (compatibility version 1.0.0, current version 169.3.0) 

the next thing did create frameworks directory inside renamer.app bundle , copy qtwidgets, qtgui , qtcore frameworks new directory:

$ cd ~/documents/qtprojects/build-renamer-desktop_qt_5_1_0_clang_64bit-release $ mkdir renamer.app/contents/frameworks $ cp -r ~/qt5.1.0/5.1.0/clang_64/lib/qtcore.framework renamer.app/contents/frameworks $ cp -r ~/qt5.1.0/5.1.0/clang_64/lib/qtgui.framework renamer.app/contents/frameworks $ cp -r ~/qt5.1.0/5.1.0/clang_64/lib/qtwidgets.framework renamer.app/contents/frameworks 

then ran install_name_tool set identification names qtwidgets, qtgui , qtcore frameworks:

$ cd ~/documents/qtprojects/build-renamer-desktop_qt_5_1_0_clang_64bit-release $ install_name_tool -id @executable_path/../frameworks/qtcore.framework/versions/5/qtcore "renamer.app/contents/frameworks/qtcore.framework/versions/5/qtcore" $ install_name_tool -id @executable_path/../frameworks/qtgui.framework/versions/5/qtgui "renamer.app/contents/frameworks/qtgui.framework/versions/5/qtgui" $ install_name_tool -id @executable_path/../frameworks/qtwidgets.framework/versions/5/qtwidgets "renamer.app/contents/frameworks/qtwidgets.framework/versions/5/qtwidgets" 

then ensured application knows find library:

$ cd ~/documents/qtprojects/build-renamer-desktop_qt_5_1_0_clang_64bit-release $ install_name_tool -change /../frameworks/qtcore.framework/versions/5/qtcore @executable_path/../frameworks/qtcore.framework/versions/5/qtcore "renamer.app/contents/macos/renamer" $ install_name_tool -change /../frameworks/qtgui.framework/versions/5/qtgui @executable_path/../frameworks/qtgui.framework/versions/5/qtgui "renamer.app/contents/macos/renamer" $ install_name_tool -change /../frameworks/qtwidgets.framework/versions/5/qtwidgets @executable_path/../frameworks/qtwidgets.framework/versions/5/qtwidgets "renamer.app/contents/macos/renamer" 

finally, since qtgui framework depends on qtcore , qtwidgets framework depends on qtgui/qtcore, changed reference qtgui , qtwidgets:

$ install_name_tool -change /../frameworks/qtcore.framework/versions/5/qtcore @executable_path/../frameworks/qtcore.framework/versions/5/qtcore "renamer.app/contents/frameworks/qtgui.framework/versions/5/qtgui" $ install_name_tool -change /../frameworks/qtgui.framework/versions/5/qtgui @executable_path/../frameworks/qtgui.framework/versions/5/qtgui "renamer.app/contents/frameworks/qtwidgets.framework/versions/5/qtwidgets" $ install_name_tool -change /../frameworks/qtcore.framework/versions/5/qtcore @executable_path/../frameworks/qtcore.framework/versions/5/qtcore "renamer.app/contents/frameworks/qtwidgets.framework/versions/5/qtwidgets" 

however, when run otool -l renamer.app/contents/macos/renamer again afterwards, nothing changes , same output before:

renamer.app/contents/macos/renamer:     /users/paul/qt5.1.0//5.1.0/clang_64/lib/qtwidgets.framework/versions/5/qtwidgets (compatibility version 5.1.0, current version 5.1.0)     /users/paul/qt5.1.0//5.1.0/clang_64/lib/qtgui.framework/versions/5/qtgui (compatibility version 5.1.0, current version 5.1.0)     /users/paul/qt5.1.0//5.1.0/clang_64/lib/qtcore.framework/versions/5/qtcore (compatibility version 5.1.0, current version 5.1.0)     /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/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)     /usr/lib/libsystem.b.dylib (compatibility version 1.0.0, current version 169.3.0) 

i thought running otool -l renamer.app/contents/macos/renamer change output new qt paths, still same. thought followed steps, doesn't work. did miss step or wrong? able deploy program on windows without problem, i'm having trouble on mac. how can make running otool display newly set path finding qtcore, qtgui , qtwidgets framework within renamer.app bundle?

i tried use macdeployqt deploy app, app doesn't work when rename/remove qt library installed under ~/qt5.1.0/5.1.0/clang_64. tried commands sudo macdeployqt renamer.app under project folder after adding /bin path. macdeployqt runs fine, when rename/remove qt, application no longer runs. ran otool after running macdeployqt, output hasn't changed. think macdeployqt copies necessary qt libraries app bundle, not correctly change qt libraries.

as stefano pointed out in comment install_name_tool can picky! using path /../frameworks/qtcore.framework/versions/5/qtcore when calling insall_name_tool while reference should /users/paul/qt5.10/etc. (exactly shown otool -l) qt 5.2 using macdeployqt easier :)


Comments

Popular posts from this blog

Unable to remove the www from url on https using .htaccess -