这里有一篇很棒的文章,描述了如何在 Xamarin/C# 中使用本机 C++ 库,我认为这会扩展到 MAUI:https: //learn.microsoft.com/en-us/xamarin/cross-platform/cpp /
我按照这些说明进行操作,并在这里整理了一个端到端的演示解决方案: https: //github.com/whodges/bindingsample。这确实需要您将 Visual Studio 连接到 MacBook 来构建完整的解决方案。
该示例本质上使用默认的 MAUI 模板,并对其进行了轻微修改,以便根据每个平台设置实际的“点击计数器”值并从本机库中检索。对于 Windows,这是一个 C++ DLL(效果很好)。对于 Android,这是一个 .so 库(效果很好)。对于 iOS,这是一个静态 .a 库,这就是我遇到麻烦的地方:当我尝试使用 iOS 模拟器启动这个应用程序时,它失败并出现 clang++ 错误,并且出现类似“无法提取来自 .../obj/Debug/net6.0-ios/iossimulator-x64/linker-cache/libCounteriOS.a 的本机库“libCounteriOS.a”。请确保本机库已正确嵌入到托管程序集中(如果该程序集是使用绑定项目构建的,本机库必须包含在项目中,并且其构建操作必须是“ObjcBindingNativeLibrary”)”。
我创建了一个 C# .NET iOS 绑定库项目(在我的示例中为 Counter.iOS),这应该捆绑 libCounteriOS.a,它是在编译 CounteriOS(一个 C++ 项目)时生成的。首先,当在 Windows 上使用 Visual Studio 构建 Counter.iOS 时,它无法在其“bin”文件夹中生成 Counter.resources 文件夹以及后续的“manifest”文件。当我使用 Visual Studio for Mac 时,会生成这些文件。因此,我坚持使用 Visual Studio for Mac 来构建 iOS.Counter 项目(其他所有内容都是使用 Windows 上的 Visual Studio 构建的)。
无论如何,我仍然收到我描述的“无法提取本机库”错误。我尝试将 Counter.iOS 中库文件的“构建操作”设置为 ObjcBindingNativeLibrary,但这只会导致 Visual Studio for …