Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 在Mac OSX上重新定位后修补Qt二进制文件的脚本_Macos_Qt_Dylib_Install Name Tool - Fatal编程技术网

Macos 在Mac OSX上重新定位后修补Qt二进制文件的脚本

Macos 在Mac OSX上重新定位后修补Qt二进制文件的脚本,macos,qt,dylib,install-name-tool,Macos,Qt,Dylib,Install Name Tool,我正在从源代码构建Qt5。我想知道在MacOS下复制粘贴qt二进制文件最简单的方法是什么。如果在任何qt框架上运行otool,您将看到所有依赖项都使用绝对路径: 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

我正在从源代码构建Qt5。我想知道在MacOS下复制粘贴qt二进制文件最简单的方法是什么。如果在任何qt框架上运行otool,您将看到所有依赖项都使用绝对路径:

    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\u name\u工具来解决,但这是一项非常容易出错的手工工作。我想知道是否有一个脚本,可以帮助我在这方面

如果您是从源代码构建QT5,那么静态链接将解决您的一些难题

列出的原始链接已断开

要静态构建QT,请在运行时向参数中添加-static。/configure例如

./configure -prefix /Developer/qt -qt-zlib -qt-libpng -qt-libjpeg -universal -sdk /Developer/SDKs/MacOSX10.4u.sdk -static -release
使用:makesubsrc编译


安装方式:sudo make Install

如果您是从源代码构建QT5,那么静态链接将解决您的一些难题

列出的原始链接已断开

要静态构建QT,请在运行时向参数中添加-static。/configure例如

./configure -prefix /Developer/qt -qt-zlib -qt-libpng -qt-libjpeg -universal -sdk /Developer/SDKs/MacOSX10.4u.sdk -static -release
使用:makesubsrc编译


使用:sudo make Install在Internet上进行长时间搜索后安装。我发现它有必要的代码来修补MacOSX下重新定位的Qt二进制文件。运行这个代码有一个小问题,它是用C++编写的,编译时不太容易,因为它依赖QT4,而我使用Qt5.1。幸运的是,所有操作都可以通过命令行进行。 要使用该命令,您需要使用Qt installer Framework创建的任何安装程序。对于Mac OSX,Qt binary installer已经足够好了,可以使用以下命令:

./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安装程序。玩弄


好了,就这样,这是我迄今为止找到的最直接的方法。

在互联网上搜索了很长时间。我发现它有必要的代码来修补MacOSX下重新定位的Qt二进制文件。运行这个代码有一个小问题,它是用C++编写的,编译时不太容易,因为它依赖QT4,而我使用Qt5.1。幸运的是,所有操作都可以通过命令行进行。 要使用该命令,您需要使用Qt installer Framework创建的任何安装程序。对于Mac OSX,Qt binary installer已经足够好了,可以使用以下命令:

./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安装程序。玩弄


好了,就这样,这是迄今为止我发现的最直接的方法。

这可能有效:链接另一个伟大的答案:这可能有效:链接另一个伟大的答案:链接似乎已断开断开断开的链接已被删除,信息已直接添加。链接似乎已断开断开断开的链接已被删除,信息已直接添加。