跨平台C ++工具链

时间:2012-03-02 00:25:30

标签: c++ .net macos cross-platform build-process

我是一名顽固的.NET开发人员,在C ++方面经验有限。我真的很熟悉解释性语言(和脚本语言)如何跨平台工作,但是C ++呢?

我意识到GCC / GPP和其他一些编译器使用正确的编译器标志进行多平台工作,我知道STL在编译器之间是标准化的,但我还缺少什么呢?我需要进行音频输入/输出,高精度计时器,我需要进行多线程处理。我不认为STL中支持这些东西,所以我需要某种类型的跨平台库,对吧?我应该使用哪一个?

我的目标是支持最新的Mac和Windows平台。这是一个共享框架/ sdk,没有UI。我计划使用Native-C / Cocoa和.NET / WPF等本机语言编写UI(两者都具有出色的本机UI支持)。

那么我的工具链应该是什么样子?我应该使用GCC / GPP还是MinGW?我应该整合哪些其他“库”才能跨平台运行?我想将我的构建环境设置为“正常工作”,以便我可以构建Mac兼容二进制文件和Windows兼容二进制文件(32位和64位)。我怎么能这样做?

此时,我将为每个平台编写代码,以便我可以使用这个我的C ++多平台框架sdk / api。在Windows中,我认为这看起来像一个托管DLL,是吗?关于如何在Mac上执行此操作的任何想法?

有任何建议或建议吗?

感谢您的建议, 布雷特

3 个答案:

答案 0 :(得分:3)

1)你真正的目标应该是编写可移植的C ++ - 通过保持语言清洁而不是使用特定的编译器来获得可移植性。

2)你想要的一些东西,比如音频i / o,本身就是平台依赖的。但是,您可以干净地隔离特定模块中的平台依赖项,并在每个平台上有条件地编译一组平台支持文件。

3)多线程这样的东西可以使用标准库以独立于平台的方式完成。

答案 1 :(得分:1)

进入主观领域,但对于一个曾经使用大型,全能型框架的开发人员,比如我们在.NET中找到的那些框架,QT可能是你最好的跨平台C ++类比(虽然我不是它的巨大粉丝)。你有你的线程,XML I / O,本地化,套接字,高精度计时器,GUI构建块等。

  

[...]我需要做多线程。我不认为这些事情   STL [...]

支持

只是一件小事,但STL仅限于描述C ++标准库的聚合容器和通用算法。它不是同义词,但C ++ 11在标准库中具有用于并发支持的规范。但是,流行的编译器仍然很难完全支持它。如果您暂时需要线程,也可以提升:http://www.boost.org这是一个极其跨平台的库。

至于构建一个可以愉快地插入各种环境(.NET,Cocoa等)的API,您最好的,大多数跨平台选项实际上是公开一个C API(您可以使用C ++自由地实现它) )。它会以这种方式造成最少的麻烦(没有名称错误,试图与复杂的,用户定义的C ++类型等互操作的问题。)

我建议您在开始尝试开发宏库之前,先在C ++中构建DLL /共享库作为扩展.NET和Cocoa应用程序的方法(例如:Objective-C中使用的C ++模块)。

答案 2 :(得分:0)

对于时序,标准库具有<chrono>,其在Mac上具有纳秒分辨率。不幸的是,从VS11 Beta开始,Windows上的分辨率只有毫秒级。我希望他们能够毫不拖延地修复它。