繁体   English   中英

如何在C ++中为Android和iOS创建共享库?

[英]How do I create a shared library in C++ for both Android and iOS?

我正在使用LibGDX来为Android和iOS编写应用程序,并且我希望能够向我的应用程序添加C ++代码以优化某些部分并移植某些功能等。

我一直在互联网上搜索并尝试遵循一些教程,但是没有找到我需要的东西。

如何编写可以在LibGDX中加载的非常基本的C ++库? 我需要使用哪些工具? 视觉工作室? 我在Android Studio中开发。

我认为我需要Android的.so文件和iOS的.a文件,对吗?

在两个平台上,都可以直接包含预编译的库以及C ++源代码。

在Android上,您需要研究使用Android NDK 这使您可以包含可以桥接到Java的本地C / C ++代码。 Java和C / C ++之间的连接由JNI管理。 在C ++和Java之间进行通信时,这是一个相当繁琐,笨拙的系统。 您将需要研究设置一个Android.mk makefile,该文件指定如何将库(或源代码)包括到您的构建中。

在iOS上,它之间的联系更加紧密。 您可以具有可以同时运行C ++和Objective-C代码的Objective-C ++文件。 如果您使用的是Swift,它会有所不同(在Objective-C ++和Swift之间架起桥梁)。

在某些情况下,当平台(Android / iOS)提供的功能优于C ++可能实现的功能或实际功能时,您可能会发现自己在架构代码,以便您的C ++可以根据需要扩展到平台。 这意味着每个平台上的标头可能带有单独的实现文件。

  • thing.h
  • thing_android.cpp
  • thing_ios.mm

Android应用程序的Android.mk文件将包含thing_android.cpp (但不包括thing_ios.mm )。 每当您需要Android SDK中的内容时,此文件就可以越过JNI桥梁与Java进行对话。

iOS应用将包含thing_ios.mm (但不包括thing_android.cpp )。 .mm扩展名表示Objective-C ++,因此该文件可以根据需要直接调用功能强大的Cocoa库。

最后,在所有平台上,您都需要确保将C ++的使用缩减到最小公分母平台。 换句话说,如果iOS支持C ++的特定功能,而Android不支持,则您将无法使用该特定功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM