我已经使用 Brew 在我的 mac 上安装了 FreeType。我的 mac 上的代码工作正常,但是当我尝试在其他 mac 上运行该项目时,我收到下面提到的链接错误。
dyld: Library not loaded: /usr/local/opt/freetype/lib/libfreetype.6.dylib
Referenced from: /Users/ashutosh/Library/Developer/Xcode/DerivedData/InstrumentChamp-
etytleaabhxmokadgrjzbgtmwxfl/Build/Products/Debug/instrumentchamp.app/Contents/MacOS/instrumentchamp
Reason: image not found (lldb)
当我尝试在其他 Mac 上运行代码时,Freetype 的所有库目录和包含目录都包含在项目的“$SRCROOT/”目录中。
您在库的链接错误中看到的路径是brew 在我创建此项目的mac 中安装freetype 的位置。
/usr/local/opt/freetype/lib/libfreetype.6.dylib
我已将所需的所有 lib/ include/ 目录复制到我的项目的主文件夹中。
我已经在 Xcode 中设置了库并包含路径。
我在这里缺少什么?我还需要做什么才能使我的代码在任何其他 Mac 上可移植。
我通过安装 Brew 让项目在其他 Mac 上运行,但我想不需要安装 Brew 即可完成此操作。
PS:我必须使用brew安装freetype,因为我无法为32位处理器的freetype编译.dylib,.dylib的64位副本给我错误,例如“错误的架构!”
我在评论中得到的基本想法是,OS X 在搜索库的位置方面非常愚蠢,它将使用编译期间使用的相同绝对路径在运行时解析它们。
通常,当您想要将应用程序部署/分发到与构建应用程序的计算机不同的计算机时,您将在安装包/捆绑包中包含您的库。但是您可能希望它们在运行时使用相对于您的应用程序的路径,因此 install_name_tool -change 允许您用相对路径替换令人讨厌的绝对路径。
希望这是有道理的,苹果让在 OS X 上使用系统范围的框架变得非常容易,但自定义库就不那么容易了。如果您使用系统范围的框架进行编译,/System/Library/Frameworks/...
在所有 OS X 安装上普遍可用(给定相同的目标发行版本)。
为了解决您的问题,我将执行以下操作:
install_name_tool -change /usr/local/opt/freetype/lib/libfreetype.6.dylib @executable_path/lib/libfreetype.6.dylib <executable_name_here>
然后它将停止在编译软件时的位置查找 libfreetype.6.dylib ,而是相对于运行时可执行文件的位置搜索它(在本例中,在子目录中)lib/
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)