0

在我的 Visual Studio Xamarin Forms iOS 项目中,我正在链接一个使用 Visual Studio Cross C++ 平台构建和部署的本机 (c++) 库。我可以链接并在实际设备上运行(通过 Mac 服务器),但我无法让它通过模拟器工作。如果我使用相同的链接设置构建,构建会失败,无法找到入口点。如果我选择不链接,则构建成功,但在尝试调用本机代码的位置运行时,我得到了 Entrypointnotfoundexception。

4

1 回答 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 Architecturesx86_64

于 2018-02-20T20:30:32.443 回答