移植win32代码(windows.h)到linux

我正在一个C ++项目,我有一堆Visual Studio生成的项目文件,我想端口到Linux。 我基本上是在Windows上的多个文件中使用windows.h头文件。 现在,我不确定,因为那里没有明确的存在linux.h文件(如果是这样,请指导我在哪里看)。 在Linux上,我使用Eclipse CDT进行开发。 我有两个想法,它可能会在Linux上工作,但我希望你的input知道什么是正确的方向是:

(1)用C ++文件中的Linux API调用删除Windows API调用。 但是,这意味着,我不得不在Linux中find相同的function,我不知道在哪里看。 例如。 在Win32中的Filetime相当于在Linux中的东西(还没有发现这个东西)。

(2)我复制这些函数的基本语法(如在windows.h中写的),只是创build一个头文件(可以说我把它命名为linux.h),并将这个头文件包含在linux项目中。

所以,显然你可能已经发现我对如何推进事情感到困惑。 我只是想把这件事情搞清楚 除了以下内容,请给我build议/意见:(1)不,我不想使用Boost。 (2)我不想在Visual Studio中重写这些文件。

Solutions Collecting From Web of "移植win32代码(windows.h)到linux"

这真的取决于你的应用程序。 如果它只有一个非gui应用程序命令行。 你应该看看用不同的平台(linux,Mac OS X)兼容的posix版本来替换你的win32调用。

所以这是选项1.你可以转换Filetime到posix 这里 ,并用自己的函数包装它,每个你想编译的os都有一个#ifdef。

选项2是一个痛苦,在那里做了。 但它仍然是一个选项,它取决于你在源代码中有多少个Win32函数,以及它们与posix版本的区别。 我不推荐这个选项。

一旦学习了win32函数的posix版本并尽可能地停止使用win32函数,选项1会更好。

Linux实现了POSIX API 。 如果您按照路径(1),您需要从这里找到替换标题和呼叫。

或者,您可以使用Winelib尝试在Linux上“本地”编译Windows代码。 Wine项目实现了很多Windows API,所以它可以工作,理论上可以重新编译你的Windows程序,例如在ARM for Linux上运行,但是他们对此没有任何保证。

然而,如果你想遵循第二条路径,你需要重新编译你的用户可能已经安装的每个Wine版本,所以如果他们在x86上,那么给他们二进制文件自定义酒前缀配置为已知的工作状态。

第三种方法是放弃所有这些,然后使用像Qt这样的工具包进行重写,这个工具包可以跨Windows / Mac / Linux进行交叉编译,并直接调用底层操作系统。 如果你发现你的代码经常需要在不同的操作系统上工作,这可能是最好的选择。

这听起来像你想在Linux上的Windows API。 我认为你也应该考虑通过用像STL和Boost这样的可移植库替换Windows API调用来使你的C ++代码变得可移植。

但是,如果你真的无法做到这一点,那么看WineHQ ,这是Linux上的Windows API的实现。