Xcode 未能将库正确复制到应用程序包

Xcode 未能将库正确复制到应用程序包,xcode,terminal,bundle,dylib,Xcode,Terminal,Bundle,Dylib,全部, 我正在使用Xcode。我的项目包含一个可执行二进制文件和两个具有相互依赖关系的dylib 在我的Xcode项目中,我成功地创建了一个脚本阶段来复制应用程序包中的动态库文件(全部)。但是,当我尝试从终端运行应用程序时,它失败了 我得到的错误如下: Dyld Error Message: Library not loaded: /usr/local/lib/liblibpropertypages.dylib Referenced from: /Users/igorkorot/dbha

全部,

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

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

我得到的错误如下:

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"
因此,加载
libdbwindow.dylib
的位置已更改,但加载
liblibpropertypages.dylib
的位置未更改。代码完全相同

我错过了什么


蒂亚

您的一个库依赖于另一个库,因此您也需要更改其中的引用

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"

谢谢你的回复。我会试试的。现在我很好奇——什么是身份证?它是做什么的?它是一个加载命令,动态库用它指定自己的规范路径。当针对动态库进行链接时,该值将复制到链接二进制文件的loadu dylib命令中。