在我的 Visual Studio Xamarin Forms iOS 项目中,我正在链接一个使用 Visual Studio Cross C++ 平台构建和部署的本机 (c++) 库。我可以链接并在实际设备上运行(通过 Mac 服务器),但我无法让它通过模拟器工作。如果我使用相同的链接设置构建,构建会失败,无法找到入口点。如果我选择不链接,则构建成功,但在尝试调用本机代码的位置运行时,我得到了 Entrypointnotfoundexception。
问问题
165 次
1 回答
0
我刚刚浏览了您评论中的示例,在这里使用了他的示例代码。我必须做几件事才能让它正常运行。我的问题是在 Xamarin.iOS 上,但相同的步骤可以应用于 Xamarin.Forms,假设您已经有特定于平台的集成工作。
由于您的代码可以在物理设备上运行,因此您应该已经拥有一个Native Static Reference
库.a
。但是 iOS 模拟器运行在x86_64
架构上(iOS 11 及更高版本不支持i386
),而您的设备可能运行在ARM
. 听起来您的库是为仅支持您设备的架构而构建的。lipo
您可以通过在 Mac上运行来检查这一点:
% lipo -info /usr/lib/libCLib.iOS.a
要同时支持 sim 的架构(请参阅本文),请将 C++ 项目构建为您需要支持的架构,然后将它们组合起来,如下所示:
lipo -create -output libCLib.iOS.a libCLib.iOS-x8664.a libCLib.iOS-arm64.a
在 Visual Studio 中使用该输出.a
文件作为新文件。将您的项目设置Native Static Reference
更改为,这应该就是一切。希望这可以帮助某人。Supported Architectures
x86_64
于 2018-02-20T20:30:32.443 回答