2016-02-03 93 views
2

我使用Xcode和Qt完成了我的Mac应用程序。现在我想准备将它部署到其他mac上。为了做到这一点,我使用了macdeployqt。当通过otool查看时,install-name-tool不会添加库的路径?

我刚刚用macdeployqt创建了一个应用程序包。但是一些图书馆不见了。我试图遵循[这个] [1]的答案。事实证明,我需要从我的电脑复制丢失的dylib到.app,然后运行安装名称工具。我还没有得到安装名称工具,因为我对使用-id-change感到困惑,特别是在我目前的情况下。我甚至需要使用它吗?这是我到目前为止所做的。

第1步:运行macdeployqt - 这是一个附带Qt的程序,它将qt的必要要求嵌入到应用程序中。

> /Users/Guest/Qt/5.5/clang_64/bin/macdeployqt project2.app 

第2步:然后我决定实际产生的应用程序二进制

> pwd 
/Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS 
> otool -L project2 

project2: 
    @rpath/libcreatecore_rt.dylib (compatibility version 0.0.0, current version 0.0.0) 
    @rpath/QtQuick.framework/Versions/5/QtQuick (compatibility version 5.5.0, current version 5.5.1) 
    @rpath/QtConcurrent.framework/Versions/5/QtConcurrent (compatibility version 5.5.0, current version 5.5.1) 
    @rpath/QtSvg.framework/Versions/5/QtSvg (compatibility version 5.5.0, current version 5.5.1) 
    /System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0) 
    /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0) 
    @executable_path/../Frameworks/libosg.141.dylib (compatibility version 141.0.0, current version 3.5.1) 
    @executable_path/../Frameworks/libosgDB.141.dylib (compatibility version 141.0.0, current version 3.5.1) 
    @executable_path/../Frameworks/libosgGA.141.dylib (compatibility version 141.0.0, current version 3.5.1) 
    @executable_path/../Frameworks/libosgUtil.141.dylib (compatibility version 141.0.0, current version 3.5.1) 
    @executable_path/../Frameworks/libosgViewer.141.dylib (compatibility version 141.0.0, current version 3.5.1) 
    @executable_path/../Frameworks/libosgManipulator.141.dylib (compatibility version 141.0.0, current version 3.5.1) 
    @executable_path/../Frameworks/libOpenThreads.20.dylib (compatibility version 20.0.0, current version 3.3.0) 
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5) 
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 22.0.0) 
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1256.14.0) 
    /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0) 
    @rpath/libtbb.dylib (compatibility version 0.0.0, current version 0.0.0) 
    @rpath/libtbb_debug.dylib (compatibility version 0.0.0, current version 0.0.0) 
    @rpath/libtbbmalloc_debug.dylib (compatibility version 0.0.0, current version 0.0.0) 
    @rpath/libtbbmalloc_proxy.dylib (compatibility version 0.0.0, current version 0.0.0) 
    @rpath/libtbbmalloc_proxy_debug.dylib (compatibility version 0.0.0, current version 0.0.0) 
    @rpath/libtbb_preview.dylib (compatibility version 0.0.0, current version 0.0.0) 
    @rpath/libtbb_preview_debug.dylib (compatibility version 0.0.0, current version 0.0.0) 
    @rpath/libquazip.1.dylib (compatibility version 1.0.0, current version 1.0.0) 
    @executable_path/../Frameworks/libprotobuf.9.dylib (compatibility version 10.0.0, current version 10.1.0) 
    @rpath/QtQml.framework/Versions/5/QtQml (compatibility version 5.5.0, current version 5.5.1) 
    @rpath/QtNetwork.framework/Versions/5/QtNetwork (compatibility version 5.5.0, current version 5.5.1) 
    @rpath/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.5.0, current version 5.5.1) 
    @rpath/QtGui.framework/Versions/5/QtGui (compatibility version 5.5.0, current version 5.5.1) 
    @rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.5.0, current version 5.5.1) 
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1) 

步骤3执行命令otool: 但是我发现我的project2.app/Contents/Frameworks没有这些库在他们里面。所以我决定手动复制它们。

cp /usr/local/lib/libosg.141.dylib    project2.app/Contents/Frameworks/libosg.141.dylib 
cp /usr/local/lib/libosgDB.141.dylib   project2.app/Contents/Frameworks/libosgDB.141.dylib 
cp /usr/local/lib/libosgGA.141.dylib   project2.app/Contents/Frameworks/libosgGA.141.dylib 
cp /usr/local/lib/libosgUtil.141.dylib   project2.app/Contents/Frameworks/libosgUtil.141.dylib 
cp /usr/local/lib/libosgViewer.141.dylib  project2.app/Contents/Frameworks/libosgViewer.141.dylib 
cp /usr/local/lib/libosgManipulator.141.dylib project2.app/Contents/Frameworks/libosgManipulator.141.dylib 
cp /usr/local/lib/libOpenThreads.20.dylib  project2.app/Contents/Frameworks/libOpenThreads.20.dylib 

你能告诉我复制这些文件后我的下一步应该是什么?

这是输出,我得到当我试图运行另一台计算机上的应用程序,而无需使用install_name_tool

Dyld Error Message: 
    Library not loaded: libosgUtil.141.dylib 
    Referenced from: /Users/one/Desktop/project2.app/Contents/Frameworks/libosgDB.141.dylib 
    Reason: image not found 

Binary Images: 
    0x7fff6c436000 -  0x7fff6c46c837 dyld (353.2.1) <65DCCB06-339C-3E25-9702-600A28291D0E> /usr/lib/dyld 

更新:

有些挣扎后,我决定做以下

install_name_tool -change libosg.141.dylib @executable_path/../Frameworks/libosg.141.dylib /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2 
install_name_tool -change libosgDB.141.dylib @executable_path/../Frameworks/libosgDB.141.dylib /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2 
install_name_tool -change libosgGA.141.dylib @executable_path/../Frameworks/libosgGA.141.dylib  /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2 
install_name_tool -change libosgUtil.141.dylib @executable_path/../Frameworks/libosgUtil.141.dylib  /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2 
install_name_tool -change libosgViewer.141.dylib  @executable_path/../Frameworks/libosgViewer.141.dylib  /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2 
install_name_tool -change libosgManipulator.141.dylib @executable_path/../Frameworks/libosgManipulator.141.dylib /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2 
install_name_tool -change libOpenThreads.20.dylib  @executable_path/../Frameworks/libOpenThreads.20.dylib  /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2 

这似乎并没有解决问题,因为当我这样做的一个图书馆,我只是补充说。

otool -L libosgDB.141.dylib 
libosgDB.141.dylib: 
    @executable_path/../Frameworks/libosgDB.141.dylib (compatibility version 141.0.0, current version 3.5.1) 
    libosgUtil.141.dylib (compatibility version 141.0.0, current version 3.5.1) <-----!!!Why did this not change!!!!! 
    /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 157.0.0) 
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 22.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1) 
    /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) 
    libosg.141.dylib (compatibility version 141.0.0, current version 3.5.1)  <-----!!!Why did this not change!!!!! 
    libOpenThreads.20.dylib (compatibility version 20.0.0, current version 3.3.0)<-----!!!Why did this not change!!!!! 
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0) 
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1256.14.0) 
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1256.1.0) 
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0) 

我仍然没有得到这些库libOpenThreads.20.dylib , libosgUtil.141.dylib and libosg.141.dylib路径任何建议将是更受欢迎。

+0

你能看看这个吗? – arqam

回答

1

libosg.141.dylib是你在你的内置应用程序中包含的dylib。

你应该看实际在应用程序的二进制...那就是:

otool -L /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2 

至于重置库的路径指向的dylib为“@executable_path/../Frameworks/libosg.141.dylib”而不是“/usr/local/lib”,尝试做这个:

install_name_tool -change libosg.141.dylib @executable_path/../Frameworks/libosg.141.dylib /Users/Guest/project_XCODE/bin/Release/project2.app/Contents/MacOS/project2 
+0

我试试这个 – MistyD

+0

你不需要改变库的安装名称。在链接到它之前,这是有用的**,以便链接器使用该安装名称作为链接可执行文件中的引用。由于您在链接后操纵事物,因此没有任何意义。 –

+0

是的,我拿出了''-id'“命令。 –