首页 / 知识
用C编写跨平台应用程序
2023-04-13 16:46:00

Writing cross-platform apps in C在C中编写跨平台应用程序时应牢记哪些事情?目标平台:32位基于Intel的PC,Mac和Linux。我特别在寻找Jungle Disk在其USB桌面版(http://www.jungledisk.com/desktop/download.aspx)中具有的多功能性。 提示和"陷阱"是什么?对于这种类型的开发? 我维护了ANSI C网络库很多年,该库已移植到接近30种不同的OS和编译器上。该库没有任何GUI组件,因此更加容易。我们最终将跨平台不一致的任何例程抽象到专用源文件中,并在这些源文件中的适当位置使用了#defines。这使每个平台调整的代码与库的主要业务逻辑隔离开来。我们还广泛使用typedef和我们自己的专用类型,以便我们可以根据需要轻松地在每个平台上更改它们。这使得向64位平台的移植变得相当容易。 如果您要使用GUI组件,建议您使用WxWindows或Qt(均为C库)之类的GUI工具包。 尝试避免依赖于平台的#ifdef,因为当您添加新平台时,它们会呈指数增长。而是尝试将您的源文件组织为一棵树,在根目录中具有平台无关的代码,在" leaves "上具有平台相关的代码。关于该主题的一本好书是《多平台代码管理》。其中的示例代码可能看起来已经过时了,但是本书中描述的想法仍然非常重要。 除了Kyle的回答,我强烈建议您不要尝试在Windows中使用Posix子系统。它实现到绝对最低的最低水平,因此Microsoft可以在功能表复选框上声明" Posix support "。也许有人在那里实际使用它,但是我在现实生活中从未见过。测试一下。单元测试和CI(持续集成)解决方案将确保您的程序在所有目标平台上都能正常工作。 一种好的方法是将系统相关的内容隔离在一个或几个模块中最多。从该模块提供与系统无关的接口。然后在该模块之上构建其他所有内容,因此它不依赖于要编译的系统。 XVT具有一个跨平台的GUI C API,该API已成熟15年,位于本机窗口工具的顶部。请参阅WWW.XVT.COM。 它们至少支持LINUX,Windows和MAC。 我还建议将不同平台的代码分为不同的模块/树,而不是ifdefs。 我也建议事先检查您的平台有什么区别以及如何抽象它们。例如。这是一些与操作系统相关的资料(例如,文本文件中令人讨厌的CR,CRLF,LF)或硬件资料。例如。前面提到的posix兼容性并不能阻止您在
上运行,但是在不同的硬件平台上,内部内存布局可能会完全不同(字节性),从而迫使您在某些目标平台上使用转换功能。 确实存在很少的可移植库,只是我过去使用过的示例 1)glib和gtk 2)libcurl 3)libapr 几乎可以覆盖所有平台,因此它们是极其有用的工具。 Posix在Unices上很好,但是我怀疑Windows上的性能很好,此外我们那里没有用于便携式GUI的任何东西。 尝试使用POSIX进行尽可能多的编写。 Mac和Linux本机支持POSIX,Windows有一个可以运行它的系统(据我所知-我从未真正使用过它)。如果您的应用程序是图形化的,则Mac和Linux都支持X11库(本机为Linux,Mac通过X11.app),并且有多种方法可以使X11应用程序在Windows上运行。 但是,如果您正在寻找对于真正的多平台部署,您可能应该切换到Java或Python之类的语言,该语言能够在多个系统上运行相同的程序而几乎没有更改。 编辑:我刚刚下载了该应用程序并进行了研究文件。它似乎在一个目录中具有所有3个平台的二进制文件。如果您担心如何编写可在计算机之间移动而不丢失设置的应用程序,则可能应将所有配置写入与可执行文件位于同一目录中的文件中,而不要触摸Windows注册表或在其中创建任何点目录在Linux或Mac上运行程序的用户的主文件夹。就创建交叉发行版的Linux二进制文件而言,32位POSIX / X11可能是最安全的选择。我不确定像我在Mac上当前使用的JungleDisk一样。 |
最新内容
相关内容
linux命令提示符井号?
linux命令提示符井号?,地址,工作,系统,命令,目录,用户,路径,终端,表示,代表,linux常用命令及用法(linux常用命令详解和用法)linux常用命令及用linux命令输入提示?
linux命令输入提示?,地址,系统,工作,命令,分析,网站,环境,异常,信息,电脑,linux命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目录的linux命令提示符大全?
linux命令提示符大全?,系统,管理,环境,信息,数据,庞大,工具,标准,命令,用户,Linux系统常用命令与DOS命令的类似之处和本质区别各是什么?区别一linux常用命令提示符?
linux常用命令提示符?,地址,工作,系统,信息,管理,目录,命令,路径,控制台,图形界面,linux中#是什么意思?1、第一类:root(超级管理员),UID为0,这个用linux命令提示目录?
linux命令提示目录?,工作,标准,信息,名称,系统,命令,数据,软件,目录,文件,在linux系统中,显示/root目录下所有文件的命令是1、首先打开Termina命令提示符输错linux?
命令提示符输错linux?,位置,信息查询,状态,环境,不了,命令,模式,后面,编辑,前面,shell命令打错了,怎么退出了执行exit命令退出 exit命令是shellinux发命令提示输入?
linux发命令提示输入?,系统,密码,工作,环境,终端,首页,分行,首次,命令,提示符,linux下的“命令提示符”是什么啊,怎么进啊?1、命令提示符是在linux命令提示符太长?
linux命令提示符太长?,系统,工作,第一,环境,数字,命令,终端,提示符,程序,表示,Linux命令提示符如何按照自己的习惯修改?1、在目录下:vim .bashrlinux终端提示命令?
linux终端提示命令?,工作,系统,信息,命令,地址,代码,标准,目录,项目,名称,linux命令linux系统常用操作命令如下:ls:全拼list,功能是列出目录的内linux系统提示命令?
linux系统提示命令?,系统,工作,地址,信息,命令,管理,标准,名称,设备,服务,Linux常用系统管理命令linux常用命令有pwd命令、cd命令、ls命令、calinux打开命令提示?
linux打开命令提示?,系统,首页,代码,终端,环境,项目,电脑,命令,快捷键,窗口,linux提示命令快捷键是什么?1、Alt + Tab 切换窗口 Alt +按住左linux命令提示符默认?
linux命令提示符默认?,系统,标准,信息,基础,代码,软件,美元,电脑,提示符,用户,如何配置Linux命令行的字体和背景颜色1、\033[46m:设置背景色为