代码之家  ›  专栏  ›  技术社区  ›  rigon

如何编写跨平台程序?

  •  6
  • rigon  · 技术社区  · 14 年前

    我搜索了一些关于跨平台编程开发的文献,但没有找到真正好的东西。

    我不是在寻找一个像Java那样的跨平台虚拟机。

    有没有这方面的书或文献?

    7 回复  |  直到 14 年前
        1
  •  5
  •   Mawg says reinstate Monica    14 年前

    @斯塔芬和其他人已经给出了很好的建议,所以我不打算提供解决方案——只是建议一种方法。

    有很多可能的解决方案,我想说一个主要的决定是你是否想要一个GUI。如果不是,你可以用C。使用GUI,使用Java(你不想这样),或者使用NetBEans作为IDE,使用Qt作为widget。

    Splint

    建立一个像Hudson这样的持续集成系统,定期构建所有东西,并确保您有许多自动单元测试(使用CppUnit或类似的工具),并在每个平台上使用相同的测试,测试的目标是可移植性问题。

    Posix 或者只使用ansic或其他符合标准的语言。

    另请参见:

    http://www.hookatooka.com/wpc/

    当然,还有, http://www.google.com/search?hl=en&rls=com.microsoft%3Aen-sg&q=portable+code

        2
  •  7
  •   Staffan    14 年前

    • 不使用非标准的“标准库”功能,非标准的功能取决于您的目标平台(例如POSIX兼容系统)。例如,如果你用C,就不要用 popen() 如果希望应用程序在非POSIX系统上运行。
    • 确保在需要的位置正确处理endianess,例如,当您通过网络将数据传输到另一台计算机时(可能使用不同的字节顺序)。
    • 只写兼容的代码,例如不依赖GCC/VC/name编译器的特定功能。

    • 使用跨平台库来抽象所需的非标准功能,或者编写代码来处理所有目标平台。

    编辑:还有很多事情要考虑,比如不要假设 / 用作路径分隔符,或对文件名中允许使用哪些字符进行无效假设。

        3
  •  2
  •   joe snyder    14 年前

    如果您不使用“代码一次,随处运行”的开发环境(换句话说,您的一些代码必须针对每个目标平台进行定制),那么请确保您的程序确实需要在多个平台上运行。

    我知道有一个程序编译成两个版本,一个用于Mac,一个用于Windows。尽管这两种平台的大部分代码都是相同的,但有一部分代码是特定于主机操作系统的,并且经常需要两种环境特有的修改和测试。Windows和Mac的销量分别为98%和2%,但这两个版本所需的设计/编程/测试/文档编制时间基本相同。业主们决定,与其把未来每一美元程序员时间的一半给Mac版本,只得到2%的回报,不如干脆把这个版本封存起来。他们的跨平台问题立即消失了,程序员的生产力基本上翻了一番(这让Windows客户很高兴)。

        4
  •  2
  •   rigon    14 年前

    我要一本书,但没人看。

    我发现了一本书,叫做“C++跨平台开发:构建Mac OS X、Linux和Windows应用程序”。

    这里有一个亚马逊的链接和对感兴趣的人的描述:

    http://www.amazon.com/exec/obidos/tg/detail/-/032124642X/

       Cross-Platform Development in C++ is the definitive guide to developing 
       portable C/C++ application code that will run natively on Windows, 
       Macintosh, and Linux/Unix platforms without compromising functionality, 
       usability, or quality. 
    
       Long-time Mozilla and Netscape developer Syd Logan systematically 
       addresses all the technical and management challenges associated with 
       software portability from planning and design through coding, testing, 
       and deployment. Drawing on his extensive experience with cross-platform 
       development, Logan thoroughly covers issues ranging from the use of 
       native APIs to the latest strategies for portable GUI development. Along 
       the way, he demonstrates how to achieve feature parity while avoiding 
       the problems inherent to traditional cross-platform development 
       approaches. 
    
       This book will be an indispensable resource for every software 
       professional and technical manager who is building new cross-platform 
       software, porting existing C/C++ software, or planning software that may 
       someday require cross-platform support. 
    
       Build Cross-Platform Applications without Compromise
    
       Throughout the book, Logan illuminates his techniques with realistic 
       scenarios and extensive, downloadable code examples, including a 
       complete cross-platform GUI toolkit based on Mozilla's XUL that you can 
       download, modify, and learn from. Coverage includes 
         - Policies and procedures used by Netscape, enabling them to ship Web 
       browsers to millions of users on Windows, Mac OS, and Linux 
         - Delivering functionality and interfaces that are consistent on all 
       platforms 
         - Understanding key similarities and differences among leading 
       platform-specific GUI APIs, including Win32/.NET, Cocoa, and Gtk+ 
         - Determining when and when not to use native IDEs and how to limit 
       their impact on portability 
         - Leveraging standards-based APIs, including POSIX and STL
         - Avoiding hidden portability pitfalls associated with floating point, 
       char types, data serialization, and types in C++ 
         - Utilizing platform abstraction libraries such as the Netscape 
       Portable Runtime (NSPR) 
         - Establishing an effective cross-platform bug reporting and tracking 
       system 
         - Creating builds for multiple platforms and detecting build failures 
       across platforms when they occur 
         - Understanding the native runtime environment and its impact on 
       installation 
         - Utilizing wxWidgets to create multi-platform GUI applications from a 
       single code base 
         - Thoroughly testing application portability
         - Understanding cross-platform GUI toolkit design with Trixul
    
        5
  •  1
  •   Mustafa Zengin    14 年前

    没有一个Java虚拟机可以在不同的平台上工作。Java有不同的虚拟机在不同的平台上运行,以便Java程序在每个平台上运行。它是一种使Java程序能够在任何地方运行的层。

    例如,一个C程序可以在windows和linux上运行,但它应该使用运行应用程序的操作系统的相应编译器进行编译。

    但是在java中,您不需要这样做。您只需编译源代码,就可以分发已编译的文件,这些文件可以在任何平台上执行。

        6
  •  1
  •   Jack    14 年前

    如果不使用虚拟机,您总是会遇到相同的问题:您可以在操作系统上使用的许多功能都是特定于该操作系统的。

    这是因为没有人真正关心定义一种方法来做同样的事情,主要是因为使用DirectX10比其他操作系统更有优势。

    我想说,编写一个能够在MacosX和Linux上运行的跨平台应用程序相当容易,因为您可以利用许多能够在这两台机器上运行的东西(想想X11或GTK),而且它们都有Unix。如果某些功能的兼容性缺失,通常通过一些努力,你也可以使你的程序在Windows下工作(可能是MinGW或Cygwin)。

    简单的回答是:不,你不能没有虚拟机语言,除非你把你的程序功能限制在一小部分通用特性上。

    (我假设我们谈论C/C++是因为通常其他语言只由一组人管理,他们关心尽可能多地跨平台发布它)

    我并不觉得依赖虚拟机有什么坏处。现在的计算机能够运行虚拟机而不会出现大的速度问题。然后,在你和操作系统之间放置一个抽象层,你只需要知道一种方法就可以做一些高级的事情。。我认为在速度上权衡Java之类的东西是可以被广泛接受的。。他们只是做了您在尝试编写复杂的跨平台应用程序时必须做的事情。

    只是一个事实:我在尝试将我从Unix(Linux/OSX)编写的虚拟机移植到Windows时真的很痛苦,因为 freopen

        7
  •  1
  •   Bryan Oakley    14 年前

    如果您选择一种现代的脚本语言(Tcl和Python是两个典型的例子),那么您可以编写在所有平台上运行几乎相同的程序。当然,你必须为一个平台或另一个平台留出一些空间,但这很容易做到。看看这些语言能给我们一些启发。

    您不会用这些语言创建下一个photoshop或第一人称射击游戏,但是对于大多数常见的编程任务来说,这些都是非常合适的。

    如果你想要一些具体的东西,看看 http://tkdocs.com 它展示了运行在多种平台和多种语言(Tcl、Ruby、Perl、Python)上的Tk工具箱