【发布时间】:2015-07-15 08:52:55
【问题描述】:
我有一个用 C++ 为 Windows 编写的相当大的项目,其中包含一些特定于 MSVC 的花哨的东西,例如 __declspec(property)、SEH 的使用、额外的模板和宏灵活性、内在函数等。
简而言之,它由各种应用程序和一个共享库 (lib) 组成,这是一个相当大的“算法”代码。它完全用纯 C++(MSVC 的版本,如我所说)编写,不依赖于任何 3rd-party,所有代码都是“手工制作”,没有 stdlib、STL、Boost 等。
现在需要将这段代码移植到移动平台,即Android和iOS。
代码应该独立于平台。除了非常基本的东西,比如堆内存分配之外,没有明确的对操作系统的依赖。它确实依赖于一些特定于 Windows 的东西:SEH、TLS,但如果它们不能被替换,这些都是我可以牺牲的。
我正在考虑如何处理它。从特定于 MSVC 的东西中清除整个代码是可能的,但不方便。我更愿意保留它们,而且我绝对不想为不同平台保留多个代码库。
那么,我可以使用哪些选项? 据我了解,有适用于 Android 的 C++ 编译器(NDK 的一部分),但它们可能与标准 C++ 兼容。无论如何,iOS 开发基于 Objective-C,它是普通 C 的超集。
这让我想到了将现有的特定于 MSVC 的 C++ 代码“编译”成纯 C 的想法。MSVC 编译器中有一个选项可以生成“列表”文件,其中包含汇编代码。我想是否可以选择创建包含 C 代码的适当列表。或者,符合 MSVC 的第 3 方 C++ -> C 转换器。
有什么想法吗?
【问题讨论】:
-
SEH 很棒。但它真的损害了可移植性。 GCC 的人拒绝在他们的编译器中将 try/except/finally 作为 C 的扩展。不过,我不记得为什么了。
-
FWIW,即使iOS开发基于Objective-C,你仍然可以在那里使用便携式C++,你可以编写Objective-C++来集成它(基本上可以包含Objective C的文件和 C++ 语法)。
标签: android c++ ios android-ndk porting