如何使我的C ++代码跨平台能力?

时间:2009-10-20 18:00:26

标签: c++ windows linux cross-platform

如何使我的C ++代码跨平台能力?我需要它在Windows和Xubuntu上工作。

8 个答案:

答案 0 :(得分:5)

如果我理解这个问题......你可以使用C / C ++预处理器指令:

#if defined(WIN32) || defined(WIN64) 
   // windows code
#else 
   // linux and mac code ...
#endif

更新:好的,现在问题很清楚......

对于跨平台c ++代码,您可以使用Qt。它是一个功能强大的c ++框架,它是跨平台和免费的。

答案 1 :(得分:3)

cygwin可以帮助您在Windows上使用linux / unix代码。

答案 2 :(得分:3)

通常,任何相当复杂的程序都需要从一开始就设计为跨平台。将现有程序改编成跨平台是不可能的。

没有更多细节,很难说更多。

有助于填写详细信息的问题包括: 你的程序在哪里不是跨平台的?在用户界面?在特定的图书馆?在特定的OS调用中?

您是否可以访问整个程序的源代码?或者您依赖外部静态库和/或DLL?

答案 3 :(得分:1)

您需要使用跨平台开发库,例如BoostApache Portable Runtime或者您需要了解两个平台的API(POSIX和WinApi),以便选择一个主要相互兼容的子集。

答案 4 :(得分:1)

一点建议是抽象出使用os函数的功能。这样,您可以最大限度地减少#define的使用,并使特定于操作系统的组件易于管理。 (见:adapter pattern。)

答案 5 :(得分:0)

没有源代码,你不能。您可以欺骗并模拟另一个操作系统(使用Virtualbox或KVM / Xen)但您无法在Linux上运行Windows二进制文件,反之亦然。

源代码如此重要的原因之一......

答案 6 :(得分:0)

如果您的项目取决于其他库 - 您需要找到目标操作系统的那些库的版本。然后更改构建系统以正确链接那些。

另一个解决方案是将您的项目转换为面向服务的体系结构(SOA),与单一应用程序相比具有许多优势。

答案 7 :(得分:0)

使用预处理程序指令:

#ifdef WIN32
/* WINDOWS CODE */
#else
/* LINUX CODE */
#endif