【问题标题】:Failing to properly copy the library to Application Bundle未能正确地将库复制到应用程序包
【发布时间】:2020-07-01 04:48:17
【问题描述】:

所有,

我正在使用 Xcode。我的项目包含一个可执行的二进制文件和几个具有相互依赖关系的 dylibs

在我的 Xcode 项目中,我成功地创建了一个脚本阶段来复制应用程序包中的 dylib 文件(所有这些文件)。但是,当我尝试从终端运行应用程序时 - 它失败了。

我得到的错误如下:

Dyld Error Message:
  Library not loaded: /usr/local/lib/liblibpropertypages.dylib
  Referenced from: /Users/igorkorot/dbhandler/dbhandler/Build/Products/Debug/dbhandler.app/Contents/Frameworks/liblibdbwindow.dylib
  Reason: image not found

但在脚本中我有以下代码:

cp -f ~/dbhandler/dbhandler/Build/Products/Debug/liblibpropertypages.dylib "$TARGET_BUILD_DIR/$TARGET_NAME.app/Contents/Frameworks/liblibpropertypages.dylib"
install_name_tool -change /usr/local/lib/liblibpropertypages.dylib @executable_path/../Frameworks/liblibpropertypages.dylib "$TARGET_BUILD_DIR/$TARGET_NAME.app/Contents/MacOS/$PRODUCT_NAME"

cp -f ~/dbhandler/dbhandler/Build/Products/Debug/liblibdbwindow.dylib "$TARGET_BUILD_DIR/$TARGET_NAME.app/Contents/Frameworks/liblibdbwindow.dylib"
install_name_tool -change /usr/local/lib/liblibdbwindow.dylib @executable_path/../Frameworks/liblibdbwindow.dylib "$TARGET_BUILD_DIR/$TARGET_NAME.app/Contents/MacOS/$PRODUCT_NAME"

所以加载liblibdbwindow.dylib 的地方改变了,但是加载liblibpropertypages.dylib 的地方没有改变。代码完全一样。

我错过了什么?

TIA!

【问题讨论】:

    标签: xcode terminal bundle dylib


    【解决方案1】:

    您的一个库依赖于另一个库,因此您也需要更改那里的引用。

    install_name_tool -change /usr/local/lib/liblibpropertypages.dylib @executable_path/../Frameworks/liblibpropertypages.dylib "$TARGET_BUILD_DIR/$TARGET_NAME.app/Contents/Frameworks/liblibdbwindow.dylib"
    

    您可能还想更改这些库的 ID:

    install_name_tool -id @executable_path/../Frameworks/liblibpropertypages.dylib "$TARGET_BUILD_DIR/$TARGET_NAME.app/Contents/Frameworks/liblibpropertypages.dylib"
    install_name_tool -id @executable_path/../Frameworks/liblibdbwindow.dylib "$TARGET_BUILD_DIR/$TARGET_NAME.app/Contents/Frameworks/liblibdbwindow.dylib"
    

    【讨论】:

    • 感谢您的回复。会尝试的。现在我很好奇 - 什么是 ID?它有什么作用?
    • 这是一个加载命令,dylib 用它指定了自己的规范路径。并且当链接到 dylib 时,该值被复制到链接二进制文件的 LOAD_DYLIB 命令中。 See comment in headers here.
    猜你喜欢
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2011-04-02
    • 1970-01-01
    • 2020-05-23
    相关资源
    最近更新 更多