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。您需要确切的来源才能得到答案。
您显示的所有标题都是系统标题,应使用尖括号<>
。
“有没有简单的方法可以做到这一点?” - 没有。
我的简单两步过程将做到这一点: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"
)。 wc
、cat
、grep
等命令行实用程序(具有所有功能的子集)可能可以用可移植的 C++11 编写,甚至可能不需要任何额外的框架。
PS。如果没有您的源代码并且不知道该应用程序是什么,就不可能为您提供更多帮助。您的首要任务是准确理解该代码以及它应该在 Windows 上做什么。也许用干净的 C++11 重写它(可能使用一些额外的框架......)是最快的方法。
【讨论】:
程序是用 Visual CPP 编写的。我不想重写它,除非我别无选择。 您不需要全部重写。你只需要重新编码那些编译失败的东西。对于一些相当干净的代码,这应该相当容易。但是"setjmp.h"
在 C++ 中即使在 Windows 上也是错误的,所以我猜你的代码非常混乱和错误(即使在 Windows 上)。
我希望它是我的代码 - 它会为我省去很多麻烦。这是一个不再在我公司工作的人的旧代码,现在我需要为 Linux 编译它(wine 不是一个选项)。
但是您需要了解该代码并准确了解它在做什么(在 Windows 上)。也许代码太乱了,使用一些可移植的框架从头开始重写是完成工作的最快方法以上是关于CPP - 将源代码从 Windows 转换为 Linux [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
无法将参数 5 从 'SIZE_T *' 转换为 'size_t *' -- 为啥?