2017-04-23 40 views
-5

我有一个单一文件CPP应用程序,专为Windows构建,并且仅在命令行中运行。CPP - 将源代码从Windows转换为Linux

我正在努力为Linux编译它。

的应用程序使用的唯一库是:

#include <iostream> 
#include "setjmp.h" 
#include "windows.h" 
#include "time.h" 

它还使用各种无符号整数(UINT8,UINT16,UINT32,UINT64)的。

除此之外,没有其他Windows特定的API。

我的问题是如何转换代码,以便它将与Linux兼容? 有没有简单的方法来做到这一点?

+1

你为什么在C++中使用SJLJ? –

+5

这太宽泛了,因为'windows.h'几乎包含了大部分winapis。你需要确切的来源才能得到答案。 –

+2

您显示的所有标题都是系统标题,并应使用尖括号'<>'。 –

回答

1

这样做是相反的。代码,可能使用一些像PocoQt跨平台框架(这也是非GUI代码可用,例如使用QtCoreQtGui),或Boost,在某些Windows独立的方式,并定期编写它操作系统。

BTW setjmp.h是C++不友好(与C++异常混淆并且不兼容),即使在Windows上也是如此。

所以删除

#include "setjmp.h" /// wrong in all C++ programs 
#include "windows.h" //// specific to Windows 

然后修复代码(例如所有的编译错误,但在Linux上编译所有提个醒&调试信息,例如与g++ -Wall -Wextra -g),可能使用像我提到的那些一些框架。

不要转换 C++代码(从Windows到Linux),但努力去写便携式 C++代码,这要归功于一些精心挑选的框架。

也许您的应用程序可以写一些纯粹的便携式C++ 11(但后来,无需#include "windows.h")。像wc,catgrep(带有所有功能的子集)的命令行实用程序可能可以用可移植的C++ 11编写,甚至可能不需要任何其他框架。

PS。如果没有源代码,也不知道应用程序是什么,就不可能为您提供更多帮助。你的第一个任务是精确理解代码,以及它在Windows上应该做什么。也许用干净的C++ 11重写它(也许有一些额外的框架....)是最快的方法。

+0

该程序是用Visual CPP编写的。我不想重写它,除非我没有别的选择。 – tush

+3

你不需要重写*全部。你只需要重新编码那些被编译失败的东西。对于一些相当干净的代码,这应该相当容易。但是''setjmp.h''在C++中甚至在Windows上都是错误的,所以我猜你的代码是非常混乱和错误的(即使在Windows上)。 –

+0

我希望这是我的代码 - 它会为我节省很多头痛。这是来自某人的旧代码,现在我不需要在公司工作,现在我需要为Linux编译它(葡萄酒不是一种选择)。 – tush