我搜索了一些关于跨平台编程开发的文献,但并没有找到非常好的内容。
我不是在寻找像Java那样的虚拟机进行跨平台开发。
是否有任何关于此方面的书籍或文献?
我搜索了一些关于跨平台编程开发的文献,但并没有找到非常好的内容。
我不是在寻找像Java那样的虚拟机进行跨平台开发。
是否有任何关于此方面的书籍或文献?
@Staffan和其他人提供了宝贵的建议,因此我不会提供解决方案 - 只是建议一种方法。
有很多可能的解决方案,我认为一个重要的决定是是否需要GUI。如果不需要,则可以使用C语言。而对于GUI,可以使用Java(你不想用),或者使用NetBEans作为IDE,并使用Qt作为小部件。
但无论你做什么,我认为最重要的是尽早检测潜在问题。如果你使用C语言,可以使用Splint或其他静态代码分析工具来警告可移植性问题。同样地,将编译器警告级别设置为最高应该会有所帮助。
设置连续集成系统(如Hudson)以定期构建所有内容,并确保拥有大量的自动化单元测试(使用CppUnit或类似工具),并在每个平台上使用相同的测试,针对可移植性问题进行测试。
也许可以考虑Posix或仅使用Ansi C或其他符合标准的语言。
如何设置CI取决于您有多少潜在目标。也许您需要在单独的PC或VM上运行每个目标。如果您选择C或C ++,则可能希望在Windows下使用Cygwin中的GCC以及您选择的C / C ++编译器(需要建议好的免费编译器?)http://www.hookatooka.com/wpc/
当然,还有http://www.google.com/search?hl=en&rls=com.microsoft%3Aen-sg&q=portable+code等相关内容。
我曾经向别人要一本书,但是没有人推荐给我。
我发现了一本名为“C++跨平台开发:构建Mac OS X、Linux和Windows应用程序”的书。
这里有一个亚马逊的链接和对于感兴趣的人的描述:
http://www.amazon.com/exec/obidos/tg/detail/-/032124642X/
C++跨平台开发是开发可在Windows、Macintosh和Linux/Unix平台上本地运行而不会影响功能、易用性或质量的可移植C/C++应用程序代码的权威指南。
长期从事Mozilla和Netscape开发的Syd Logan系统地解决了与软件可移植性相关的所有技术和管理挑战,从规划和设计到编码、测试和部署。Logan凭借其丰富的跨平台开发经验,全面介绍了从使用本机API到最新的可移植GUI开发策略等问题。在此过程中,他演示了如何实现特性平衡,同时避免传统跨平台开发方法固有的问题。
这本书将成为每个正在构建新的跨平台软件、移植现有C/C++软件或计划可能需要跨平台支持的软件的软件专业人员和技术经理的必备资源。
不折衷地构建跨平台应用程序
在整本书中,Logan通过现实场景和大量可下载的代码示例阐明了他的技巧,包括一个基于Mozilla XUL的完整跨平台GUI工具包,您可以下载、修改和学习。覆盖范围包括: - Netscape使用的策略和程序,使他们能够在Windows、Mac OS和Linux上向数百万用户提供Web浏览器 - 提供在所有平台上一致的功能和界面 - 了解领先的特定于平台的GUI API之间的关键相似性和差异,包括Win32/.NET、Cocoa和Gtk+ - 确定何时使用本机IDE,何时不使用以及如何限制其对可移植性的影响 - 利用基于标准的API,包括POSIX和STL - 避免与C++中的浮点、字符类型、数据序列化和类型相关的隐藏可移植性陷阱 - 利用平台抽象库,如Netscape可移植运行时(NSPR) - 建立有效的跨平台错误报告和跟踪系统 - 为多个平台创建构建并在平台发生构建失败时检测它们 - 了解本机运行时环境及其对安装的影响 - 利用wxWidgets从单个代码库创建多平台GUI应用程序 - 充分测试应用程序的可移植性 - 了解使用Trixul进行跨平台GUI工具包设计
如果不使用虚拟机,你总会遇到同样的问题:很多操作系统可以使用的特性都是特定于该操作系统的。
这是因为没有人真正关心定义完成相同任务的方法,主要因为例如拥有DirectX10等功能对其他操作系统来说是一个优势。
我认为编写跨平台应用程序非常容易,在MacosX和Linux上运行,因为你可以利用许多能够在两台机器上运行的东西(考虑X11或GTK),它们都在Unix下运行。通常,只要付出一些努力,你就可以使你的程序在Windows下工作(也许使用MinGW或Cygwin),即使某些功能的兼容性缺失。
此外,不同的操作系统对于同样的事物实际上具有不同的实现方式(如套接字、io系统、图形、音频等),所以这使得仅编写一个在任何地方均可工作的版本成为不可能:你必须为计划发布程序的每个操作系统编写不同的版本。
简短的答案是:除非你限制你的程序功能到一小组共同的特性,否则你不能没有虚拟机语言。
(我假设我们正在谈论C/C++,因为通常其他语言由各自的人组成的一个小组来管理,他们尽可能地进行跨平台发布)
我并没有真正看到在依赖虚拟机方面存在任何明显的缺点。如今的计算机可以在不影响速度的情况下运行虚拟机。因此,有一些关注于在您和操作系统之间放置抽象层的东西,将让您只需掌握一种方法就能做一些高级的事情。我认为像Java这样的速度妥协是被广泛接受的……他们只是在尝试编写一个复杂的跨平台应用程序时所必须做的。
仅仅是个事实:当我尝试将我编写的虚拟机从Unix(Linux / OSX)移植到Windows时,我遇到了很多痛苦,因为freopen
函数存在问题……不幸的是,相对于其他操作系统,Windows以不同的方式管理流,因此MinGW缺少了该功能,而我不得不找到解决该问题的方法。
没有特定的适用于不同平台的Java虚拟机。Java在不同平台上有不同的虚拟机,以便Java程序能够在每个平台上运行。这是一种将Java程序能够在任何地方运行的中间层。
例如,C程序可以在Windows和Linux上运行,但必须使用相应操作系统的编译器进行编译。
但在Java中,你不需要这样做。只需编译源代码,并可以分发已编译的文件,这些文件可以在任何平台上执行。
如果你选择一种现代脚本语言(Tcl 和 Python 是两个极好的例子),你可以编写几乎在所有平台上运行的程序。当然,你需要对某个平台进行小调整,但这很容易做到。看看那些语言,获取一些灵感。
用这些语言,你不会创建下一个 Photoshop 或第一人称射击游戏,但对于绝大多数常见的编程任务来说,它们相当适用。
如果您想要具体的东西,请参阅 http://tkdocs.com,该网站展示了 Tk 工具包在多个平台上以及使用多种语言(Tcl、Ruby、Perl、Python)的运行情况。