Cross Platform library in C++ for Windows, WM, WinCE, MacOS, iPhone

时间:2023-01-29 12:02:41


Cross Platform library in C++ for Windows, WM, WinCE, MacOS, iPhone

from:   http://www.24hsoftware.com/DevelopersForum/CrossPlatform-C-Library.html

Is there a portable (Cross Platform) library in C++ for Windows, WM, WinCE, MacOS, iPhone?
I wand to port a windows screensaver written in MS Visual Studio 2005, C++.
I need the library to contain:
- animated sprites, with transparency, z-order
- bitmap stretching
- have something to avoid flickering when drawing on screen

For the settings dialogs of the screensaver it must have controls like:
- buttons,
- edit boxes,
- image place holders,
- tick boxes,
- panels,
- etc.

For the file I/O it must have:
- file read/write, getSize, fileExists functions.
- INI file class
- Text file Event Logging file class

I have been looking at the internet for cross platform libraries and have summarized below some available libraries.
It seems the most promising of them are:
QT by QtSoftware,
wxWidgets

If you have experience n cross platform programming, please give your advice.



wxWidgets
http://www.wxwidgets.org/
Create applications for Win32, Mac OS X, GTK+, X11, Motif, WinCE, and more using one codebase.

License:
L-GPL

Review:
Google PR: 6
Last announcement/update: 2009-04-28
Comparison of wxWidgets with other cross platform tools
http://wiki.wxwidgets.org/WxWidgets_Compared_To_Other_Toolkits#FLTK



SDL - Simple DirectMedia Layer
http://www.libsdl.org/
SDL is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer. It is used by MPEG playback software, emulators, and many popular games.

Platforms:
Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX.
The code contains support for AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS, and OS/2, but these are not officially supported.
There's also a version of SDL that uses NDK to run on android.

License:
GNU LGPL version 2. This license allows you to use SDL freely in commercial programs as long as you link with the dynamic library.

Review:
May developers suggest that SFML is better than SDL.
"SFML is incredibly simple and intuitive to use. "
"SDL is in C, SFML is in C++"



Allegro
http://alleg.sourceforge.net/
http://www.allegro.cc/
Allegro is a game programming library for C/C++ developers distributed freely, supporting the following platforms: DOS, Unix (Linux, FreeBSD, Irix, Solaris, Darwin), Windows, QNX, BeOS and MacOS X. It provides many functions for graphics, sounds, player input (keyboard, mouse and joystick) and timers. It also provides fixed and floating point mathematical functions, 3d functions, file management functions, compressed datafile and a GUI.

License:
gift-ware (free to use in any way)

Review:
Google PR: 5
Last announcement/update: 2009-03-25
Comments: It seems to me that SDL has larger installed base and I would prefer SDL instead of Allegro



Troll 2D
http://code.google.com/p/troll2d/
Troll is an easy-to-use 2D game engine. It supports several back-ends, such as SDL and Allegro. Compatible with any OS, such as Windows, Mac OS X, Linux and Unix. Embedded systems, like Symbian OS, Windows Mobile and the iPhone, are also supported.
* Surface transformations (rotate, scale)
* PNG support
* Frame timing control (with low CPU usage)
* Many primitives (Lines, Rect, Circle, Arc, RoundedRect)
* Alpha support

Review:
Google PR: 4
Last announcement/update: 2008-10-01
Comments: Troll has no updates for some months. Is based on SDL and Allegro, so I would go for either of those two, instead of Troll.



Qt – A cross-platform application and UI framework
http://www.qtsoftware.com
Develop applications and user interfaces once, and deploy them across Windows, Mac, Linux/X11, embedded Linux, Windows CE and S60 (coming soon) without rewriting the source code.
Qt SDK, libraries and Qt Creator IDE available under LGPL and GPL licenses.

Review:
Google PR: 6
Last announcement/update: 2009-04-23



OpenGL
Platforms: Windows, Linux and MacOS X, and mobile edtion.

Comments: I wouldn't go for OpenGL because not all graphics card support it. For example, cheap netbooks do not support it.



DirectX
Comments: I wouldn't go for DirectX because it is only for Microsoft systems.

ClanLib is a cross platform C++ toolkit library.

# Windows, Linux and Mac OS X
# Basic cross platform runtime (threading, file I/O, etc.)
# Template based C++ signal library (type-safe callbacks)
# Integrated resource management
# Sound mixer supporting wav, tracker formats (mod/s3m/xm/..) and ogg-vorbis
# XML/DOM support
# High level 2D graphics API supporting OpenGL and SDL as render targets
# Batch rendering engine maximizing performance when rendering 2D with OpenGL
# 2D collision detection
# 2D sprite animation support
# Highly customizable GUI framework
# Network library with low level and high level interfaces
# Cross platform OpenGL 2.0 wrapper

External Libraries Used by ClanLib
* zlib, required by clanCore
* libjpeg, required by clanDisplay
* libpng, required by clanDisplay
* MikMod, required by clanMikMod
* libOgg, required by clanVorbis
* libVorbis, required by clanVorbis
* FreeType, required by clanDisplay
* pcre, required by clanRegExp
* SDL, required by clanSDL

You can also download precompiled versions for Win32 of these external libraries.

Platforms:
Windows, Linux

http://www.clanlib.org/

OpenSceneGraph

The OpenSceneGraph is an open source high performance 3D graphics toolkit, used by application developers in fields such as visual simulation, games, virtual reality, scientific visualization and modelling. Written entirely in Standard C++ and OpenGL it runs on all Windows platforms, OSX, GNU/Linux, IRIX, Solaris, HP-Ux, AIX and FreeBSD operating systems. The OpenSceneGraph is now well established as the world leading scene graph technology, used widely in the vis-sim, space, scientific, oil-gas, games and virtual reality industries.

License:
The OpenSceneGraph Public License is designed to be compatible with use of proprietary applications, such applications can statically and dynamically link to the OpenSceneGraph and can be redistributed with the libraries free of charge. Your applications can be distributed under any license, be it open source or proprietary.

Platforms:
IRIX, Linux, Windows, FreeBSD, Mac OSX, Solaris, HP-UX, AIX.

The core scene graph has been designed to have minimal dependency on any specific platform, requiring little more than Standard C++ and OpenGL. This has allowed the scene graph to be rapidly ported to a wide range of platforms - originally developed on IRIX, then ported to Linux, then to Windows, then FreeBSD, Mac OSX, Solaris, HP-UX, AIX.

The core scene graph library is completely windowing system independent, which makes it easy for users to add their own window-specific libraries and applications on top. In the OpenSceneGraph distribution the osgViewer library provides native windowing support under Windows (Win32), Unices (X11) and OSX (Carbon). The osgViewer library can also be easily integrated with other windowing toolkits, such as Qt, GLUT, FLTK, SDL, WxWidget?, Cocoa and MFC.

http://www.openscenegraph.org/projects/osg/wiki/About/Introduction

OGRE (O-O Graphics Rendering Engine)

An efficient, object-oriented hardware accelerated 3D engine. It abstracts the differences between APIs and platforms and allows scene-oriented coding through an easy to use object model. Adaptable to multiple scene types (indoor, outdoor, whatever).

* Direct3D and OpenGL support
* Builds on Visual C++ and Code::Blocks on Windows
* Builds on gcc 3+ on Linux / Mac OSX (using XCode)

Scene Features

* Highly customisable, flexible scene management, not tied to any single scene type. Use predefined classes for scene organisation if they suit or plug in your own subclass to gain full control over the scene organisation
* Several example plugins demonstrate various ways of handling the scene specific to a particular type of layout (e.g. BSP, Octree)
* Hierarchical scene graph; nodes allow objects to be attached to each other and follow each others movements, articulated structures etc
* Multiple shadow rendering techniques, both modulative and additive techniques, stencil and texture based, each highly configurable and taking full advantage of any hardware acceleration available.
* Scene querying features

Platforms:
Windows (all major versions)
Linux
Mac OSX

Comments:
OGRE is "just" a rendering engine to provide a general solution for graphics rendering. Other provided facilities (vector and matrix classes, memory handling, etc.), are considered supplemental. It is not an all-in-one solution in terms of game development or simulation as it doesn't provide audio or physics support, for instance.

http://www.ogre3d.org/about/features

G3D Innovation Engine [good]

The G3D Innovation Engine is a commercial-grade C++ 3D engine available as Open Source (BSD License). It is used in commercial games, research papers, military simulators, and university courses. G3D supports hardware accelerated real-time rendering, off-line rendering like ray tracing, and general purpose computation on GPUs.

Major features include:

* 3DS, IFS, MD2, BSP, PLY2, OFF, and custom models
* JPG, PNG, BMP, PPM, PCX, TGA, DDS, and ICO images
* MP4, MPG, MOV, AVI, DV, QT, WMV, video
* Runtime debugging tools and developer HUD
* Themed GUI and font rendering
* Optional automatic memory management
* TCP and UDP-based networking with P2P LAN discovery
* Optimized n x m matrix, including inverse and SVD
* Windows XP, Vista, OS X, Linux, and FreeBSD supported
* Visual C++, XCode, and gcc compatible
* Configuration file read/write
* Spline, kd-tree, Frustum and other necessary 3D classes
* Java interoperability for file and network classes
* Tools: Model viewer, GPU benchmark, and build utilities

APIs by task:
* Debugging
* Profiling and Optimization
* 2D Graphical User Interface
* Scene Graph
* Shadows
* Images and Video
* Strings
* File I/O
* Ray Tracing and Physics
* Network

Platforms:
Windows, Linux, MacOS

License:
This library is free code-- you can use it without charge and it is minimally legally encumbered. No need to release your source code or make your own program open source.

http://g3d.sourceforge.net/

Irrlicht Engine [good]

The Irrlicht Engine is a cross-platform high performance realtime 3D engine written in C++. It is a powerful high level API for creating complete 3D and 2D applications like games or scientific visualizations.

Special effects
* Realistic water surfaces
* Dynamic lights
* Dynamic shadows using the stencil buffer
* Billboards
* Bump mapping
* Parallax mapping
* Transparent objects
* Light maps
* Customizeable Particle systems for snow, smoke, fire, ...
* Sphere mapping
* Texture animation
* Skyboxes and skydomes
* Fog

Namespace List:
irr
irr::core (In this namespace can be found basic classes like vectors, planes, arrays, lists and so on)
irr::gui (The gui namespace contains useful classes for easy creation of a graphical user interface)
irr::io
irr::scene
irr::scene::quake3
irr::video

Platforms:
* Windows, WinCE
* Linux
* OSX
* Sun Solaris/SPARC
* All platforms using SDL

Direct3D will not be present on a Mac or a Linux Workstation, while maybe OpenGL will. And when OpenGL is not available either, there are still the Irrlicht Engine software renderers, which will always operate on any platform.

Irrlicht's internal event system provides mouse, keyboard, joystick and GUI events without having to rely on additional libraries.

Filesystem access is abstracted allowing platform-independent file and folder access, and transparent access to files within Zip archives. Other IO features include an XML reader and writer, the ability to take screenshots, manipulate images and meshes and then save them in several different file formats.

Irrlicht's provides support for simple collision detection including mouse picking.

http://irrlicht.sourceforge.net/features.html#platforms



Short example
A simple application, starting up the engine, loading a Quake 2 animated model file and the corresponding texture, animating and displaying it in front of a blue background and placing a user controlable 3d camera would look like the following code. I think this example shows the usage of the engine quite well:

#include
using namespace irr;

int main()
{
// start up the engine
IrrlichtDevice *device = createDevice(video::EDT_DIRECT3D8,
core::dimension2d(640,480));

video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* scenemgr = device->getSceneManager();

device->setWindowCaption(L"Hello World!");

// load and show quake2 .md2 model
scene::ISceneNode* node = scenemgr->addAnimatedMeshSceneNode(
scenemgr->getMesh("quake2model.md2"));

// if everything worked, add a texture and disable lighting
if (node)
{
node->setMaterialTexture(0, driver->getTexture("texture.bmp"));
node->setMaterialFlag(video::EMF_LIGHTING, false);
}

// add a first person shooter style user controlled camera
scenemgr->addCameraSceneNodeFPS();

// draw everything
while(device->run() && driver)
{
driver->beginScene(true, true, video::SColor(255,0,0,255));
scenemgr->drawAll();
driver->endScene();
}

// delete device
device->drop();
return 0;
}

statically linked

Q:
Can it be statically linked with the application in a single EXE? It depends on SDL which cannot be build statically; SDL's license requires to distribute DLLs.

Visualization Library

Visualization Library is a C++ middleware for high-performance 2D and 3D graphics applications based on the industry standard OpenGL 2.1

# Code developed in standard C++/STL, inspired by Boost and Design Patterns.
# Friendly API using OpenGL wording and conventions.
# Minimalistic, efficient, professional, reliable.
# Debug-friendly behaviour.
# Designed to be a sensible, high-performance, thin layer on top of OpenGL

Namespaces:
Here is a list of all namespaces with brief descriptions:
vl - Visualization Library namespace
vlGLUT - The GLUT bindings namespace
vlMFC - The MFC bindings namespace
vlMolecule - The Molecule Visualization namespace
vlQt4 - The Qt4 bindings namespace
vlSDL - The SDL bindings namespace
vlut - Visualization Library utility namespace
vlVG - The Vector Graphics namespace
vlVolume - The Volume Rendering namespace
vlWin32 - The Win32 bindings namespace
vlWX - The wxWidgets bindings namespace

Platforms:
Windows, Linux, Mac OS X (32 and 64 bits)

License: a dual licensing model:
* For proprietary and commercial products you must to obtain a Professional Edition License (VPL).
* For open source applications: by default Visualization Library is distributed under the GNU General Public License Version 3.

Homepage:
http://www.visualizationlibrary.com/jetcms/

Review comments:
Does it run on computers without OpenGL?
It is a new software: Beta 2 version released on 2009.07.

Gosu

Gosu is a 2D game development library for the Ruby and C++ programming languages.

Platforms:
Mac OS X, Windows, Linux.

License:
MIT license

Example of code:
http://www.oreillynet.com/pub/a/ruby/2007/12/04/creating-games-in-ruby.h...

Gosu website:
http://www.libgosu.org/

POCO C++ Libraries

The POCO C++ Libraries (POCO stands for POrtable COmponents) are open source C++ class libraries that simplify and accelerate the development of network-centric, portable applications in C++.

Features:
* threads, thread synchronization and advanced abstractions for multithreaded programming
* streams and filesystem access
* shared libraries and class loading
* powerful logging and error reporting
* security and encryption
* network programming (TCP/IP sockets, HTTP client and HTTP server, FTP, SMTP, POP3, etc.)
* XML parsing (SAX2 and DOM) and generation
* configuration file and options handling
* SQL database access (ODBC, MySQL, SQLite)

Platforms:
* Windows
* Mac OS X
* iPhone OS
* (embedded) Linux
* HP-UX
* Tru64
* Solaris
* QNX

License:
Boost Software License, which makes it free — no strings attached — for both open source and commercial use.

Homepage:
http://pocoproject.org/wiki/index.php/Tutorials

Review comments:
This library does not provide portable graphics routines as requested in this page, but it seems to be a very nice portable library for the additional operations of a portable application.
There are no ready .libs to add to your project. You have to compile the library for each platform you want to use it. This is not as convenient as it would be with other libraries where you only need to add a header file in your project.

Orx - Portable Game Engine

Orx is an open source, portable, lightweight, plugin-based, data-driven and extremely easy to use 2D-oriented game engine.
Orx is a full featured and powerful "2.5D" game engine. All objects and cameras are created in a 3D space, but only a 2D rendering plugin is currently available. Adding 3D rendering will probably come after its v1.0 release as it's not part of the current focus.

Platforms:
windows (mingw and native using visual studio),
linux (x86)
MacOS X (ppc/x86)
iPhone, OpenPandora and PSP versions are already planned.

License:
LGPL meaning that you can use it (and modify it) for free for any kind of projects, freeware or commercial.

Homepage:
https://sourceforge.net/projects/orx/

Review Comments:
Release canditate 1 available (no final version available). Therefore the library is not mature.

Update

There has been some changes:
- the iPhone version has been released as a beta and the stable release is coming soon.
- orx is now licensed under the zlib license for more flexibility.
- version 1.2 has been announced and should be released before end of summer.

GamePower 3D (GP3D) and GamePower 2D (GP2D)

GamePower 3D (GP3D) and GamePower 2D (GP2D) are a portable OpenGL/SDL wrapper using C/C++ designed specifically for professional game making in various platforms such as Windows, Linux and Macintosh by exploiting the portable capabilities of OpenGL and SDL.

19th February 2007 GP3D 0.0.3 released

License:
GPL license

http://gamepower.sourceforge.net/en/index.php

C++ String Toolkit (StrTk) Library

The C++ String Toolkit (StrTk) Library is a free library that consists of robust, optimized and portable generic string processing algorithms and procedures for the C++ language. The library is designed to be easy to use and integrate within existing code.

Features:
* Generic string tokenizer and token iterators
* Split routines
* User specified delimiter and splitter policies (simple and regex based etc.)
* Conversions between data and hex and base-64
* In-place removal and replace routines
* Wild-card matching and globing
* Fast 2D token grid processing
* Extensible string processing templates

https://www.ohloh.net/p/strtk

Fog

Fog is crossplaform library for C++ language that is designed as a complete solution to build crossplatform applications. It's single library that contains multiple parts with minimum dependencies to other libraries.

Fog contains three indenpendent parts:
* Core - Plafrorm abstraction library.
* Graphics - 2D graphics library.
* UI - Windowing system and UI components.

List of most interesting 'Fog/Core' features:

* Algorithms - Classes related to containers (Vector, List, Hash, BitArray).
* Event loop - Classes related to event loops (EventLoop, Task, Timer, ...).
* Filesystem - Contains classes to work with streams, directory structure, file testing and more...
* Library - Shared libraries management.
* Object architecture - Architecture that supports own RTTI and event connections.
* Strings - Powerful and very optimized 8-bit, 16-bit and 32-bit string classes and text codecs used everywhere in library.
* Threading - Allows to create threads, synchronization primitives and thread local storag with destructors.
* Tools - All other stuff not categorized.

List of most interesting 'Fog/Graphics' features:

* Converter - Convert pixels from one format to another.
* Dithering - Convert your image to 8 bit or less using dithering technique.
* Fonts management - Classes related to fonts and font cache.
* Geometry - Geometric primitives (Point, Rect, ...)
* Image - Image container.
* ImageIO - Image input / output based on modules.
* Painter - Raster and vector based painter.
* Region - Raster based region container that is created through Y-sorted rectangles.

Fog library is not yet complete or recommended for use. Everything is in development and time is needed to improve and stabilize the library.

License:
MIT License

http://code.google.com/p/fog/

SFML - Simple and Fast Multimedia Library [good]

SFML is a portable and easy to use multimedia API written in C++. You can see it as a modern, object-oriented alternative to SDL.
SFML is composed of several packages to perfectly suit your needs. You can use SFML as a minimal windowing system to interface with OpenGL, or as a fully-featured multimedia library for building games or interactive programs.

Platforms:
Windows (98, 2000, XP, Vista)
Linux
Mac OS X

License:
SFML is completely free for any use, commercial or not, open-source or not.

Homepage:
http://www.sfml-dev.org/features.php

Code example:
http://www.sfml-dev.org/documentation/1.5/

pxCore - Portable framebuffer library & related projects [good]

pxCore is a small opensource library that provides a portable framebuffer and windowing abstraction for C++. This library is intended to hide the complexity of writing rasterization code on multiple platforms and allows you to easily write the following sorts of things in a portable way.

* 2d and 3d rasterizers
* Transition Libraries
* Filter Routines
* Image Processing

Platforms:
- Windows
- Pocketpc (arm4)
- linux(x11)
- OSX

License:
Free to use.

Homepage:
http://code.google.com/p/pxcore/

Code example:

int pxMain()
{
    myWindow win;

    win.init(10, 64, 640, 480);
    win.setTitle("Sprite");
    win.setVisibility(true);

    eventLoop.run();

    return 0;
}

TwinForms

TwinForms provides solutions to developers to create cross platform applications using CodeGear Delphi and CodeGear C++ Builder.

wxVCL for C++ is a cross platform library that mimics Delphi's VCL functions.
http://www.twinforms.com/products/wxwidgets/wxvcl.php
wxVCL for C++ is a library for wxWidgets that contains functions that mimics VCL for Delphi and C++ Builder. Currently it has some basic VCL classes and approx. 600 VCL functions (functions in SysUtils, DateUtils, System, StrUtils etc.) Unlike VCL, wxVCL can be used in various OS that are supported by wxWidgets.

portable INI file class

I have tested:

- minIni
I was not able to compile it under wince

- simpleIni
Compiles just fine on Windows and WinCE

- Boost has also a configuration class but I found it rather complex.

- wxWidgets have a ini settings class but on winCE it uses the registry instead of a plain INI file. I hate saving to registry and I do prefer the INI files.

- QT has an almost excellent QSettings class.
I was not able to link it statically with my program.

FPC - free pascal compiler

FPC - free pascal compiler can be used to create windows, winCE, MacOS, iPhone applications.

FPC is not C++ but I am listing it here, because its a promising tool for cross-platform development.

Update about iPod/iPhone:
http://wiki.freepascal.org/iPhone/iPod_development

Objective Pascal and Xcode:
http://web.me.com/macpgmr/ObjP/Xcode4/ObjP_Part1.html

Midlet Pascal (Pascal to Java)

Midlet Pascal is to use for developing Java midlets for mobile phones. Compiles Pascal programming language directly into Java bytecode usable on all Java enabled mobile phones. Midlet Pascal is a useful tool for mobile phone developers that lets them to build java games and applications.

Here are some key features of "Midlet Pascal":

· boolean, integer, character, string, array (multidimensional arrays are supported), record and image data types
· most Pascal program flow-control statements: if-then-else statement, do-while loop, repeat-until loop, for loop, procedures and functions
· support for multiple source files and multiple build configurations.
· defining constants and custom data types
· graphics functions to access the mobile device display and to load and display PNG images
· integrated PNG image editor
· functions to access the mobile device keypad
· user-interface (forms) support
· HTTP connectivity
· SMS messaging
· sound functions
· record store support (record store is where you save data on the mobile phone)
· date and time functions, string functions, random number generator functions
· customizable syntax coloring editor
· real (floating-point) numbers and math functions
· compiler directly generates Java bytecode - fast compile and execute!
· support for phone emulators
· example source of Mobile tetris

Shareware version limitations:
Screen displaying that it is unregistered version.

WideStudio - Opensource IDE and Library

WideStudio is an open source, Integrated Development Environment for desktop applications purely made in Japan. This enables you to develop GUI applications that can run on Windows95/98/Me/NT/2000/Xp/Vista, WindowsCE, Linux, FreeBSD, SOLARIS, MacOSX(w/X11), BTRON, T-Engine, mu-CLinux(wo/X11) in various programming languages such as C/C++, Java, Perl, Ruby, Python,Objective Caml

All features of WideStudio are aviable free of charge
Applications developed with WideStudio and the libraries may be distributable commercially or non-commercially. i.e. You can sell your applications built with WideStudio.

Last release: 10/Aug/2010 (checked 18/Aug/2010)

http://www.widestudio.org/EE/wsinfo.html

DSDP-NAB project

The Native Application Builder project creates framework to build a C++ and several languages GUI applications. The goal is to allow the user to write a GUI application once and build it for many platforms without changing the code.
http://www.eclipse.org/dsdp/nab/
Last release: 2008 (checked in 2010)

note:
The Eclipse Device Software Development Platform (DSDP) Project has been archived.

VGScene visual components

VGScene is a native object pascal components for Delphi/C++Builder and Lazarus. Available for Microsoft Windows, Apple Mac OS X, Linux and iPhone OS.

VGScene speeds the development of all graphical application, providing: a graphical editor integrated in IDE, graphical objects, simplify animation, advanced windows and controls, maximum performance, skinning engine, bitmap effects. VGScene can be used as development tools for SCADA, GIS, CAD and KIOSK applications.

Price: $190
http://www.ksdev.com/vgscene/index.html

MoSync

MoSync is a mobile application development SDK
Eclipse-based IDE for C/C++ application development

Extensive Mobile Platform Support

* iOS (iPhone, iPad, iPod Touch) 3.x
* Android Cupcake 1.5, 1.6, 2.1
* Java ME MIDP 2 (J2ME)
* Moblin 2.x
* Pocket PC 2003
* Smartphone 2003
* Symbian S60 2nd, 3rd, and 5th ed
* Windows Mobile 5.0-6.5

The latest version of MoSync (that's 2.4) contains support for building native C++ applications on Android.

MoSync is distributed under the standard GNU General Public License (GPL) version 2. That means that it is completely free for private use. You can even sell your applications commercially, as long as you make your source code available to others.

For individuals, businesses, and organizations who wish to develop MoSync-based applications but who do not wish to publish their source code, there are commercial subscriptions.

Prices:
Basic PRO: 200 EUR per seat, per year
Gold Pro: 3000 EUR per seat, per year
http://www.mosync.com

Juce [very good]

JUCE (Jules' Utility Class Extensions) is an all-encompassing C++ class library for developing cross-platform applications.

It is particularly good for creating highly-specialised UIs and for handling graphics and sound.

Supported development environments are XCode, Visual Studio, GCC (and probably any other modern C++ compiler).

* Applications can be compiled to run on Windows, Mac, Linux, and (just recently!) iPhone.

JUCE can be built as a static library and linked into your application, or can be used in its 'amalgamted' form, where the entire library is simply added to your target project in the form of a single .cpp file (containing over 250,000 lines of code!).

License:
GNU Public Licence, for in open-source applications.
£399 for commercial applications

http://www.rawmaterialsoftware.com/juce.php

Juce tutorial:
http://code.google.com/p/juced/wiki/JuceTutorial

juced

This is a community driven trunk of Juce, that mainly try to keep the base trunk up to date with bug fixes, new classes and things that generally couldn't be included in the main Juce repository.

What juced do better compared to juce

* Lot of classes for managing plugins and audio
* Lot of plugins and standalone applications
* Internal ViewPort support for Listeners (allow viewport thumbnails components)
* ladspa plugin format implementation
* GLX implementation for ARGB applications (linux)
* ...and much more...

http://code.google.com/p/juced/

Resco MobileBusiness Studio

Resco MobileBusiness Studio is a developer platform for the development of CRM/Field Sales/Field Service applications. Resco MobileBusiness Studio is fully integrated with the Microsoft Visual Studio environment and allows development of mobile applications working in the disconnected mode and capable of synchronizing local data with back-end system on-demand.

Multiple mobile platforms support:
Win mobile, WinCE, Tablet PC
Windows phone 7
iOS (iPhone, iPad)
Android

Single License $4'000
Team License $10'000
http://www.resco.net/enterprise/mobilebusinessstudio/overview.aspx

Note 1: iOS version is developed with use of MonoTouch by Novell, which is not included in the MobileBusiness Studio's license and must be licensed separately.

Note 2: Android version is developed with use of MonoDroid by Novell, which is not included in the MobileBusiness Studio's license and must be licensed separately.

monotouch by Novel

MonoTouch allows developers to create C# and .NET based applications that run on Apple's iPhone, iPad, and iPod Touch devices, while taking advantage of the iPhone APIs and reusing both code and libraries that have been built for .NET.

MonoTouch requires a Mac, Apple's iPhone SDK and you must be part of Apple's iPhone Developer Program to test and deploy your software on a device and to redistribute your code.

Professional Edition: $400 USD

http://monotouch.net/

smoothernity

3d game targeted on iPhone, Mac, PC, Nintendo DS, Playstation Portable, Playstation 3, Xbox 360, Nintendo Wii with smooth appearance and constant high frame rate.

Not a library but the source and the organisation of its parts can give good ideas.

http://code.google.com/p/smoothernity/wiki/Architecture

MIT License

Notes:
Project is currently at stage 2 of 8.
Seems unfinished.

openframeworks

If you're writing a purely graphical application, i.e. you're drawing everything using code, consider openFrameworks. It's an opensource graphical programming languages built on top of C/C++. It has addons which allow people to extend the language. They have an addon for the iphone. I believe that it comes with the library and the XCode projects that will help you compile apps for the iPhone and iPod touch.

The library is designed to work as a general purpose glue, and wraps together several commonly used libraries under a tidy interface: openGL for graphics, rtAudio for audio input and output, freeType for fonts,freeImage for image input and output, quicktime for video playing and sequence grabbing.

The code is written to be both cross platform (PC, Mac, Linux, iPhone) and cross compiler. The API is designed to be minimal and easy to grasp. There are very few classes, and inside of those classes, there are very few functions. The code has been implemented so that within the classes there are minimal cross-referening, making it quite easy to rip out and reuse, if you need, or to extend.

We wanted to write a library that would be the bare minimum necessary to get started doing audio-visual work with c++.
Our intended audience are folks using computers for creative, artistic expression, and who would like low level access to the data inside of media in order manipulate, analyze or explore.

http://www.openframeworks.cc/about

chipmunk-physics

Fast and lightweight 2D rigid body physics library in C

Features:

* Designed with 2D video games in mind.
* Circle, convex polygon, and beveled line segment collision primitives.
* Multiple collision primitives can be attached to a single rigid body.
* Fast broad phase collision detection by using a spatial hash.
* Extremely fast impulse solving by utilizing Erin Catto's contact persistence algorithm.
* Supports sleeping objects that have come to rest to reduce the CPU load caused by inactive objects.
* Support for collision callbacks based on user definable object types.
* Flexible collision detection system with layers, exclusion groups and event based callbacks.
* Supports point and segment (raycasting) queries to the collision detection system.
* Impulses applied to contact points can be retrieved after the impulse solver has finished for gameplay effects.
* Several kinds of joints and constraints available along with an API for easily adding new kinds of constraints.
* Lightweight C99 implementation with no external dependencies outside of the Std. C library.
* Many language bindings available.
* Simple, read the documentation and see!
* Unrestrictive MIT license.
* Makes you smarter, stronger and more attractive to the opposite gender! (It worked for me anyway)

http://code.google.com/p/chipmunk-physics/

Box2D Physics Engine

Box2D Features

Collision

* Continuous collision detection
* Contact callbacks: begin, end, pre-solve, post-solve
* Convex polyons and circles.
* Multiple shapes per body
* One-shot contact manifolds
* Dynamic tree broadphase
* Efficient pair management
* Fast broadphase AABB queries
* Collision groups and categories

Physics

* Continuous physics with time of impact solver
* Persistent body-joint-contact graph
* Island solution and sleep management
* Contact, friction, and restitution
* Stable stacking with a linear-time solver
* Revolute, prismatic, distance, pulley, gear, mouse joint, and other joint types
* Joint limits, motors, and friction
* Momentum decoupled position correction
* Fairly accurate reaction forces/impulses

System

* Small block and stack allocators
* Centralized tuning parameters
* Highly portable C++ with no use of STL containers

http://box2d.org/features.html

Hello Box2D tutorial with very good explainations of the theory behind.
http://www.box2d.org/manual.html#_Toc258082968

The Box2D source is so clean and simple that you might want to just roll your own engine from that -- all you need is broadphase collision and support for arbitrary polygons.

From iPhone to AppUp: Porting of "Ancient Frog"

"I've found that the less I'm dependent on external libraries, the more portable my code is."
Read more here: http://appdeveloper.intel.com/en-us/article/iphone-appup-porting-ancient...

Cross platform libraries from Mozilla.org

NSPR, a runtime engine that provides platform-independence (across over a dozen platforms) for non-GUI operating system facilities with support for threads, thread synchronization, normal file and network I/O, interval timing and calendar time, basic memory management (malloc and free) and shared library linking;
https://developer.mozilla.org/en/NSPR

The Cross Platform Component Object Model (XPCOM) is one of the main things that makes the Mozilla application environment an actual framework. It is a development environment that provides the following features for the cross-platform software developer:
component management
file abstraction
object message passing
memory management
https://developer.mozilla.org/en/XPCOM

The Necko Network Library
Mozilla's Network library (aka Necko) provides an extensible, platform-independent API for several layers of networking from transport to presentation layers. Its provides a generic and extensible framework for fetching URLs with support for common protocols (http, ftp, file, etc.) and a way to plug in custom protocol handlers. Necko also provides an abstract "file descriptor" interface for low-level data access.
http://www.mozilla.org/docs/netlib/necko.html

MonoDevelop IDE

MonoDevelop is an IDE primarily designed for C# and other .NET languages. MonoDevelop makes it easy for developers to port .NET applications created with Visual Studio to Linux and to maintain a single code base for all platforms.

Multiple language support
C#, Visual Basic.Net, C/C++, Vala

http://monodevelop.com/

Agar

Agar is a modern open-source, cross-platform toolkit for graphical applications implemented in C, C++, Perl and Ada.

The Agar GUI library is designed to work under almost any platform that provides a graphic display and input device. Agar can be built without any dependencies, and has even been used on embedded devices without any operating system.
http://libagar.org/index.html.en

Agar can interface with an underlying window system (i.e., Xlib, Windows API), but Agar can also provide its own window manager if there is no underlying window system (as used, for example, with the SDL direct-video driver, dumb framebuffers, low-level LCD controllers).

The base Agar library is intended to be as general and compact as possible. Separate libraries extending Agar in more specialized applications include Agar-MATH (math extensions), Agar-VG (vector graphics), Agar-RG (feature-based graphics), Agar-DEV (developer tools) and FreeSG (scene-graph and computational geometry).

Agar is free software. Its source code is freely usable and re-usable by everyone under a BSD license, which allows use in commercial applications free of charge.

Cocos2d-x open-source mobile 2D game framework

http://www.cocos2d-x.org/projects/cocos2d-x/wiki

A cross platform C++ version of cocos2d-iphone project. On top of the framework provided by cocos2d-x, mobile games can be written in C++ or Lua, using API that is COMPLETELY COMPATIBLE with that of cocos2d-iphone.

Cocos2d-x project can easily be built and run on iOS, Android, Samsung Bada, BlackBerry Table OS and more. Cocos2d-x also supports Windows and Linux, therefore we can debug source code easily and write editors on desktop operating systems.

MIT License

edgelib (good)

Cross-platform mobile development at your fingertips

EDGELIB is the most powerful and versatile middleware solution for cross-platform mobile development available today. EDGELIB enables you to create superior applications and games on a vast range of mobile platforms.

Smoothly create multi-platform applications through the generic interface for Apple iOS, Google Android, Symbian, Windows Mobile, desktop (Linux/Windows/OS X) and many more platforms!

Platforms:
Apple iOS (iPhone, iPod touch, iPad)
Google Android
Maemo 5
Antix Game Player
Symbian
Windows Mobile/CE
Linux desktop (X11)
Windows desktop (Windows 2000/XP/Vista)
Mac OS X
Gamepark Holdings GP2X console (F-100 and F-200)
Gizmondo handheld gaming console (Windows CE)

STL+ C++ Library Collection

The STL+ C++ Library Collection looks as a very good and compact library for platform abstraction.
Among others, it contains portable file system and INI storage functions.