跨平台C++工具链
Cross-platform C++ tool chain
我是一个铁杆.NET开发人员,在C++方面经验有限。我真的很熟悉解释语言(和脚本语言)是如何跨平台工作的,但C++呢?
我意识到GCC/GPP和其他一些编译器可以使用正确的编译器标志在多平台上工作,我知道STL在编译器之间是标准化的,但我还缺少什么?我需要做音频输入/输出,高精度定时器,我需要做多线程。我认为STL不支持这些东西,所以我需要一个某种类型的跨平台库,对吧?我应该用哪一个?
我的目标是支持最新的Mac和Windows平台。这是一个共享框架/sdk,不会有用户界面。我计划用Objective-C/Cococoa和.NET/WPF等原生语言编写UI(这两种语言都支持原生UI)。
那么我的工具链应该是什么样子呢?我应该使用GCC/GPP还是MinGW?我还应该集成哪些能够跨平台运行的"库"?我想把我的构建环境设置为"只工作",这样我就可以构建一个兼容Mac的二进制文件和一个兼容windows的二进制文件(32位和64位)。我该怎么做?
在这一点上,我将为每个平台编写代码,以便可以与我的C++多平台框架sdk/api进行互操作。在windows中,我认为这看起来像是一个托管DLL,对吗?有没有想过我该如何在Mac上做到这一点?
有什么建议吗?
感谢您的建议,Brett
1)您真正的目标应该是编写可移植的C++——您可以通过保持语言使用干净而不是使用特定的编译器来获得可移植性。
2) 你想要的一些东西,比如音频i/o,本质上是依赖于平台的。但是,您可以干净地隔离特定模块内的平台依赖项,并在每个平台上有条件地编译一组平台支持文件。
3) 像多线程这样的东西可以使用标准库以独立于平台的方式完成。
进入主观领域,但对于一个习惯于使用像我们在.NET中找到的那种大型、无所不能的框架的开发人员来说,QT可能是最好的跨平台C++类比(尽管我不是它的超级粉丝)。这里有你的线程、XML I/O、本地化、套接字、高精度定时器、GUI构建块等。
[…],我需要执行多线程。我不认为这些在STL〔…〕中受支持
这只是一件小事,但STL仅限于描述C++标准库的聚合容器和通用算法。它不是同义词,但C++11在标准库中有用于并发支持的规范。然而,流行的编译器仍然很难完全支持它。如果您暂时需要线程,您还可以使用boost:http://www.boost.org这是一个非常跨平台的库。
至于构建一个可以愉快地插入各种环境(.NET、Cocoa等)的API,你最好、最跨平台的选择实际上是公开一个C API(你可以自由地使用C++实现它)。通过这种方式,它将不会引起任何麻烦(没有名称篡改、尝试与复杂的、用户定义的C++类型进行互操作等问题)
我建议您在开始尝试开发一个大库之前,先练习用C++构建DLL/共享库,以此来扩展.NET和Cocoa应用程序(例如objective-C中使用的C++模块)。
对于定时,标准库具有<chrono>
,在Mac上具有纳秒分辨率。不幸的是,在VS11测试版之前,它在Windows上的分辨率只有毫秒。我希望他们能尽快解决问题。
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 在clang++预处理器中确定gcc工具链版本
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 参数化自定义CMake工具链
- 如何在QT中的自定义视频小工具t上绘制矩形
- 使用 C++ 和 i2c 工具从虚拟 i2c 写入和读取
- 用于C++的静态二进制检测或二进制重写工具和框架
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- AWS IoT 开发工具包:通过 TCP 端口 443 使用 MQTT
- 在官方张量流 resnet50 模型上运行 tflite 精度工具
- Q没有管理权限的 exe 无法启动维护工具
- C++合并排序可视化工具
- 为Bazel工具链指定sysroot
- 在自动工具中包含用于不同bin_Programs的不同库
- 如何使用MSVC 2019创建和使用Qt 5.14.0自定义小工具插件
- Eclipse CDT clang 工具链 - 无法从链接器选项中删除 stdlibc++,但可以添加 libc++,E
- 使用不同的工具时,Eccodes 会产生不同的结果
- Clang 工具,用于提取给定 lambda 类型的 lambda 主体
- 构建LLVM 10 C++工具链的问题
- 使用即将推出的C++反射工具打印类型的全名