我正在尝试添加OPN框架以添加对从Opticon手持扫描仪设备导入批次的支持。我将框架添加到项目中
在复制构建阶段添加了
并添加了运行路径搜索路径
我最初得到的完整错误就是这个错误:
dyld: Library not loaded: /Users/[original developer of framework]/Development/Mac OPN API/trunk/Sources/opn_api/build/OPN API.build/Release/OPN.build/Objects-normal/i386/OPN
Referenced from: /Volumes/Hard Disk Drive/users/[My name]/Library/Developer/Xcode/DerivedData/barcode-test2-dvksadjkbyeilghbcdcgfqwrvwcb/Build/Products/Debug/barcode-test2.app/Contents/MacOS/barcode-test2
Reason: image not found
我认为我正在获得开发人员硬盘的本地路径,因为这可能是偶然留下的,并且是它在最终失败之前尝试解决的最后一条路径。
当我检查框架是否被复制到正确的目录时,我发现我确实将它复制到了Frameworks文件夹中。
当我使用otool检查路径时,我看不到任何地方的正确路径:
OPN二进制文件上的My-MacBook:MacOS me $ otool条码-test2 -L 条形码测试2: / Users / [Original developer] / Development / Mac OPN API / trunk / Sources / opn_api / build / OPN API.build/Release/OPN.build/Objects-normal/i386/OPN(兼容版本0.0.0,当前版本0.0 .0) /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa(兼容版本1.0.0,当前版本19.0.0) /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation(兼容版本300.0.0,当前版本945.18.0) /usr/lib/libobjc.A.dylib(兼容性版本1.0.0,当前版本228.0.0)
/usr/lib/libSystem.B.dylib(兼容版本1.0.0,当前版本169.3.0) /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit(兼容版本45.0.0,当前版本1187.39.0) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation(兼容版本150.0.0,当前版本744.19.0)
otool:
My-MacBook:OPN.framework me $ otool -L OPN OPN(架构i386): / Users / [Original Developer] / Development / Mac OPN API / trunk / Sources / opn_api / build / OPN API.build/Release/OPN.build/Objects-normal/i386/OPN(兼容版本0.0.0,当前版本0.0 .0) /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa(兼容版本1.0.0,当前版本11.0.0) /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit(兼容版本1.0.0,当前版本275.0.0) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation(兼容版本150.0.0,当前版本368.35.0) /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon(兼容版本2.0.0,当前版本128.0.0) /usr/lib/libstdc++.6.dylib(兼容版本7.0.0,当前版本7.4.0) /usr/lib/libgcc_s.1.dylib(兼容版本1.0.0,当前版本1.0.0) /usr/lib/libSystem.B.dylib(兼容性版本1.0.0,当前版本88.3.11) /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices(兼容版本1.0.0,当前版本18.0.0) OPN(架构ppc): / Users / [Original Developer] / Development / Mac OPN API / trunk / Sources / opn_api / build / OPN API.build/Release/OPN.build/Objects-normal/ppc/OPN(兼容版本0.0.0,当前版本0.0 .0) /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa(兼容版本1.0.0,当前版本11.0.0) /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit(兼容版本1.0.0,当前版本275.0.0) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation(兼容版本150.0.0,当前版本368.35.0) /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon(兼容版本2.0.0,当前版本128.0.0) /usr/lib/libstdc++.6.dylib(兼容版本7.0.0,当前版本7.4.0) /usr/lib/libgcc_s.1.dylib(兼容版本1.0.0,当前版本1.0.0) /usr/lib/libSystem.B.dylib(兼容性版本1.0.0,当前版本88.3.11) /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices(兼容版本1.0.0,当前版本18.0.0)
我不应该在这里看到类似@executable_path /../ Frameworks /或其解析版本的内容吗?
我在正在搜索它的地方添加了OPN文件并确定它现在正在构建,但我真的不喜欢在我的Users目录中有一个完整的额外路径来进行此构建。
我已尝试过install_name_tool的许多变体,但每次执行命令时都不会出现错误或确认,当我再次检查otool -L时没有任何变化。
答案 0 :(得分:2)
将@executable_path/../Frameworks
添加到OPN框架构建设置的installation Directory
中。
答案 1 :(得分:1)
我最终想到了这一点,对于所有可能通过谷歌来到这里的人我也会添加答案。
首先,我通过终端前往可执行文件的位置并手动尝试。这是最终奏效的咒语:
install_name_tool -change "/Users/[Original developer]/Development/Mac OPN API/trunk/Sources/opn_api/build/OPN API.build/Release/OPN.build/Objects-normal/i386/OPN" @executable_path/../Frameworks/OPN.Framework/OPN barcode-test2
因此,您想要更改的原始路径需要完全匹配,您需要匹配框架内的二进制文件而不是捆绑包。
当我弄清楚是时候自动完成这个程序了,因为每次我构建项目时它都会有错误的设置。
在Build Phases选项卡中,我使用左上角的+添加了Run Script阶段,然后添加了以下行:
install_name_tool -change "/Users/[Original Developer]/Development/Mac OPN API/trunk/Sources/opn_api/build/OPN API.build/Release/OPN.build/Objects-normal/i386/OPN" @executable_path/../Frameworks/OPN.Framework/OPN "$BUILT_PRODUCTS_DIR/$EXECUTABLE_PATH"
[原始开发者]的真实姓名已更改,因此盲目复制粘贴显然无法工作;)