首页 > 解决方案 > 未能正确地将库复制到应用程序包

问题描述

全部,

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

在我的 Xcode 项目中,我成功地创建了一个脚本阶段来复制 Application Bundle 中的 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没有。代码完全相同。

我错过了什么?

蒂亚!

标签: xcodeterminalbundledylib

解决方案


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

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"

推荐阅读