【问题标题】:Port existing c code to iOS/iPhone将现有的 c 代码移植到 iOS/iPhone
【发布时间】:2013-02-06 12:24:54
【问题描述】:

我有一个用 C 语言编写的视频解码器的源代码。

代码已在linux OS下成功编译并执行。后来我还在 ndk 和 JNI 的帮助下将此解码器移植到了一个 android 应用程序中。

现在我的要求是将这个应用程序移植到 iOS(即 iPhone)上。我的疑问是:

  • 是否有 ndk 和 jni 之类的工具可以将此代码移植到 iOS?
  • 此代码是否存在任何可靠性问题?

我尝试用谷歌搜索相同的信息,但无法获得大量信息以继续进行移植过程。

任何关于遗嘱的建议或有用的链接都将不胜感激。请回复相同的。提前致谢。

【问题讨论】:

  • Objective-C编译器也能编译C和C++代码,你试过编译吗?
  • 没有。是不是和我们在linux里做的一样..?
  • 如果你不使用iOS SDK中不可用的外部库,它将毫无问题地编译,否则你可以尝试编译你的依赖项
  • 其实我没有任何依赖。我知道这是因为我已经将它移植到了 android 上。在android中,我们通过编译它来创建一个共享对象文件。那么在ios的情况下应该创建什么?我也使用 JNI 从 android 的 java 接口调用我的 c 代码的主要功能。那么它在 ios 中的等价物是什么??
  • 你可以创建一个静态/动态库或者直接添加到你的项目中,创建一个库的好处是你的代码不会每次都被编译

标签: iphone ios porting code-reuse


【解决方案1】:

如上所述,是的,所有 C 代码在 Objective-C 中都是有效的,因为 Objective-C 是 C 的超集。然而,这有点扭曲。声明其实是

"所有 C 语法在 Objective-C 中都是有效的"

无法保证您的所有代码在 iOS 环境中都能 100% 正常运行。由于您可以执行诸如从 C 或其他机器/操作系统特定的事情进行 UNIX 系统调用之类的事情,因此可能有部分代码在 iOS 中不受支持。如果您编写了您正在使用的所有 C 代码,并且确定它不包含这样的调用或类似的东西,那么您应该没问题。

【讨论】:

    【解决方案2】:

    好消息!

    Objective C 是用于 iPhone 的语言,它是 C 的超集。这意味着所有 C 代码都是本机支持的。完全不需要转换代码!

    更多信息here

    【讨论】:

    • @Zax 他是对的;保留代码原样。将其制成静态或动态库,并在 Objective-C 代码中使用。
    • @trojanfoe:这是一个非常有用的评论。好的,在创建一个静态库之后,我如何从我的 ios 部分代码调用我的 c 代码的 main 函数?因为在android中我们使用jni来调用原生代码的main函数..
    • @Zax 一般在库中没有“main”函数;您通常会提供创建和操作事物的函数。然而,这不再是 iOS 问题,而是如何维护可用于 JNI 和普通 C/C++/Objective-C 的代码。
    • @Zax 您只需将库链接到您的项目,导入所需的标头并正常调用该函数。见the documentation
    • 来自 ObjC,您可以像在 C 中一样调用任何 C 函数。请参阅 this example
    【解决方案3】:

    虽然没有那么简单,取决于如何用 C 编写代码。

    如果直接添加文件和调用函数不起作用,则需要对文件名进行以下更改 -

    • 制作扩展名为 .mm 而不是 .m 的文件
    • 将 .c 文件重命名为 .mm
    • 将 .h 文件重命名为 .hpp(一旦我将 C 文件移植到我的 项目)

    参考这个link

    【讨论】:

    • 这个问题与 C++ 有什么关系?
    • 这是针对 C++ 的,但要求编译 C。
    猜你喜欢
    • 2015-07-15
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多