CPP - 将源代码从 Windows 转换为 Linux [关闭]

Posted

技术标签:

【中文标题】CPP - 将源代码从 Windows 转换为 Linux [关闭]【英文标题】:CPP - Convert source code from Windows to Linux [closed] 【发布时间】:2017-04-23 11:19:27 【问题描述】:

我有一个为 Windows 构建的单文件 CPP 应用程序,仅在命令行中运行。

我正在尝试使其也可用于 Linux。

该应用使用的唯一库是:

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

它还使用各种无符号整数(uint8、uint16、uint32、uint64)。

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

我的问题是如何转换代码以使其与 Linux 兼容? 有没有简单的方法可以做到这一点?

【问题讨论】:

你为什么在 C++ 中使用 SJLJ? 这太宽泛了,因为windows.h 包含几乎大部分的winapis。您需要确切的来源才能得到答案。 您显示的所有标题都是系统标题,应使用尖括号&lt;&gt; “有没有简单的方法可以做到这一点?” - 没有。 我的简单两步过程将做到这一点:1) 删除特定于 Windows 的标头。 2) 修复编译错误。 【参考方案1】:

反过来做。代码,可能使用一些跨平台框架,如 Poco 或 Qt(也可用于非 GUI 代码,例如使用 QtCore without QtGui)或 Boost ,以某种独立于 Windows 的方式,并在两个操作系统上定期编译。

顺便说一句,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")。 wccatgrep 等命令行实用程序(具有所有功能的子集)可能可以用可移植的 C++11 编写,甚至可能不需要任何额外的框架。

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

【讨论】:

程序是用 Visual CPP 编写的。我不想重写它,除非我别无选择。 您不需要全部重写。你只需要重新编码那些编译失败的东西。对于一些相当干净的代码,这应该相当容易。但是"setjmp.h" 在 C++ 中即使在 Windows 上也是错误的,所以我猜你的代码非常混乱和错误(即使在 Windows 上)。 我希望它是我的代码 - 它会为我省去很多麻烦。这是一个不再在我公司工作的人的旧代码,现在我需要为 Linux 编译它(wine 不是一个选项)。 但是您需要了解该代码并准确了解它在做什么(在 Windows 上)。也许代码太乱了,使用一些可移植的框架从头开始重写是完成工作的最快方法

以上是关于CPP - 将源代码从 Windows 转换为 Linux [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

无法将参数 5 从 'SIZE_T *' 转换为 'size_t *' -- 为啥?

将 getrusage 从 linux 转换为 windows

将静态 windows 库转换为 dll

蹩脚的mp3改变比特率cpp

编译时出错 - 从DWORD转换为LPCVOID

如何将 windows 窗体库转换为 windows phone 库