我有一个单文件CPP应用程序,专为Windows而构建,仅在命令行中运行。
我正在努力让它也适用于Linux。
该应用程序使用的唯一库是:
#include <iostream>
#include "setjmp.h"
#include "windows.h"
#include "time.h"
它还使用各种无符号整数(uint8,uint16,uint32,uint64)。
除此之外,还没有任何其他Windows特定的API。
我的问题是如何转换代码以便它与Linux兼容? 有一个简单的方法吗?
答案 0 :(得分:1)
反过来做。代码,可能使用某些跨平台框架,如Poco或Qt(也可用于非GUI代码,例如使用QtCore 而不使用 {{3 }},或QtGui,以某种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
,cat
,grep
(具有所有功能的子集)可能可以用可移植的C ++ 11编写 - 甚至可能不需要任何其他框架。
PS。如果没有源代码并且不了解该应用程序是什么,则无法为您提供更多帮助。您的首要任务是准确理解代码以及它应该在Windows上执行的操作。也许用干净的C ++ 11(可能还有一些额外的框架......)重写它是最快捷的方法。