这是我的错误:
dyld: Library not loaded: /usr/local/lib/libofa.0.dylib
Referenced from: /sers/david/Projekte/Test/build/Debug/Test.app/Contents/MacOS/Test
Reason: image not found
我做了一些研究并使用install_name_tool更改了dylib中的路径:
davids-macbook:Test david$ otool -L libofa.0.0.0.dylib
libofa.0.0.0.dylib:
@executable_path/../Frameworks/libofa.0.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
但是Xcode一直在/ usr / lib /中搜索它:
build/Debug/Test.app/Contents/MacOS/Test:
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0)
/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
@executable_path/../Frameworks/TagLib.framework/Versions/A/TagLib (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/QTKit.framework/Versions/A/QTKit (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libexpat.1.dylib (compatibility version 7.0.0, current version 7.2.0)
/System/Library/Frameworks/Quartz.framework/Versions/A/Quartz (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libcurl.4.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/local/lib/libofa.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 103.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 44.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.29.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 751.29.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1038.32.0)
有没有办法在Xcode中设置它?感谢
编辑:该库不是Xcode项目。它的构建与./configure;使
答案 0 :(得分:21)
通常我做的是:
@rpath
。这会将安装名称设置为@rpath/libofa.0.0.0.dylib
。如果您自己构建库,可以在Xcode中设置它;否则,请使用install_name_tool
进行更改。@executable_path/../Frameworks
(或 {{1} } 的)。This blog post和this one详细介绍。
答案 1 :(得分:7)
确保从developer.apple.com安装命令行工具,然后在项目中添加库。在Xcode中运行以下脚本:目标»构建阶段»运行脚本并执行:
install_name_tool -id @executable_path/../Frameworks/librayName.dylib "$SRCROOT/librayName.dylib"
注意:在dylib名称之前需要“或”“
答案 2 :(得分:3)
在寻求解决方案之前,你应该知道MAC中依赖库“dylib”的新特性与windows中的依赖库“dll”相比。
dylib与dll的主要区别是“安装名称”。安装名称是一个烘焙到动态库中的路径,该路径说明了在运行时查找库的位置。复制dylib的位置无关紧要,它始终指向旧路径(除非不更改安装名称)。 您可以使用以下命令了解原始搜索路径(安装名称)
otool -L a.dylib
(只需拖动dylib代替a.dylib)
有关安装名称的更多详细信息,请参阅此link。
现在,更改dylib的新位置(“安装名称”)的解决方案只是使用install_name_tool
,如下所示
install_name_tool -change *old path of dylb* *new path of dylib*
你可以通过上面描述的otool -L
命令获得旧路径。(旧路径即原路径)
install_name_tool -change
也可以更改dylib和可执行文件的搜索路径。
您可以通过在项目中写入Run script
文件在Xcode中使用它。