gpt4 book ai didi

macos - 在 Cocoa 应用程序中嵌入 libclang 的教程

转载 作者:行者123 更新时间:2023-12-03 17:11:34 25 4
gpt4 key购买 nike

有人有关于在 Cocoa 应用程序中嵌入 libclang 的好教程吗?

特别是我在启动时遇到 rpath 问题,说找不到 dylib。

错误是可爱的 dyld: Library not loaded: @rpath/libclang.dylib

最佳答案

这个错误遗憾地试图告诉您,lib clang 认为它的 @rpath 位于您的应用程序包的根目录,但事实并非如此。

前几天我费了很大劲才想通了这个问题。这个很难(硬。您必须使用构建阶段设置对 libclang.a 做一些疯狂的事情。在目标的构建阶段中,您将需要添加一些运行脚本阶段。

其中一个是这样的:

echo "warning: OTOOL BEGIN1";
pwd;
otool -L ${SRCROOT}/Clangwrap/ClangAndLLVM/lib/libclang.dylib;
echo "Warning: OTOOL END1";

这只是做一些事情。首先,它很好地用一根木头夹住东西,看看发生了什么。第二个是它实际上只是在复制后确认库的路径。 (是的,您应该将其复制到您的项目中以保持理智。)otool 就是这样做的。SRCROOT 是项目的根目录,之后的任何内容都是 Finder 中项目文件夹中到要使用的库的相对路径。

再次强调,这只是确认了它就在您认为的位置。

好的,下一步。这才是真正的蠢事。

echo "BEGIN install_name_tool";
install_name_tool -id @executable_path/../Frameworks/libclang.dylib ${SRCROOT}/Clangwrap/ClangAndLLVM/lib/libclang.dylib;
echo "END install_name_tool";

这会运行晦涩的命令行工具 install_name_tool ,该工具用于设置库认为它位于应用程序包中的路径。如果不这样做,lib 就会认为它处于其他路径中。您将把这条路径设置为您想要的样子。在 Mac 应用程序中,我使用了 bundle 内的 Frameworks 文件夹,因此我将其设置为这样。 install_name_tool 的第一个参数是应用程序包中库所在的相对路径。第二个参数是 lib 当前在项目中的位置,以便 install_name_tool 可以设置其可执行路径。这实际上修改了库的一些内容,因此它是可加载的。库必须知道自己的加载路径。

请注意,第一步只是为了您自己的理智而可选。第二步是必需的,并且两者都应该在编译源构建阶段之前发生。单击并拖动将它们向上移动。

现在是最后一步。添加一个新的复制文件阶段,这将保留在构建阶段的最后。将目标设置为与 install_name_tool 的第一个参数相同,这样您就知道相对路径已设置,并且这就是您要放置库的位置。我使用了框架。现在将文件添加到此构建阶段,对于 iPhone,添加 libclang.a(我认为您不能在 iOS 上使用 libclang.dylib)

请注意,您看到我使用 libclang.dylib,那是因为我在 Mac 应用程序项目上执行了此操作。对于任何事情都应该是相同的过程。

这不是一个简单或可发现的过程,我从几个博客和文档中将其拼凑在一起。

关于macos - 在 Cocoa 应用程序中嵌入 libclang 的教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23989224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com