如何在C++中编写跨平台库的最佳实践是什么?
我的开发环境是Linux上的Eclipse CDT,但我的库应该有可能在Windows上本地编译(例如从Visual C++编译)。
谢谢。
如何在C++中编写跨平台库的最佳实践是什么?
我的开发环境是Linux上的Eclipse CDT,但我的库应该有可能在Windows上本地编译(例如从Visual C++编译)。
谢谢。
#include <linux.h>
或<windows.h>
这样)。当这不可能时(即您的库从麦克风读取原始声音数据),您需要确保给定平台的实现细节被足够抽象化,以便最小化移植库到另一个平台所需的工作量。根据我的实践经验,有几点建议:
1)确保你的目标平台中源代码的定期编译。不要等到最后。这将有助于早期发现错误。使用持续构建系统--这会让生活变得更加轻松。
2)永远不要使用特定于平台的头文件。即使是用于编写本地代码--因为你永远不知道某些 Windows 头文件中的某些内容可能期望一些字符串,在 XP 中为 ABC,但在 Win7 中则变为 ABC.12。
3)使用 STL 和 BOOST 的思想,然后在它们的基础上进行构建。但永远不要认为这些是问题的万灵药--STL 很容易随代码一起发布,但 BOOST 不行。
4)不要使用编译器特定的结构,例如 __STDCALL。这是在寻求麻烦。
5)相同的代码,在 g++ 和 cl 中使用类似的编译器选项编译可能会导致不同的行为。请始终随身携带编译器手册的一份副本。
问题有点抽象,但你可以考虑使用QT。
这其实就像是“不要使用特定于平台的任何东西”一样简单。如今有大量免费可用的工具,以C++编写跨平台代码变得轻而易举。对于那些罕见但偶尔需要使用特定于平台的API的情况,只需通过 #define 将它们分离出来,或者更好的方式是为每个平台创建独立的 .cpp 文件。
有许多跨平台库的替代方案,但我个人偏好:
最后一个,CMake,在过去几年中对我非常有帮助,可以在 Windows 和 Linux 上进行双重开发时保持我的构建环境清晰明了。它有着相当陡峭的学习曲线,但一旦运行起来,它的表现异常出色。
除了在目标平台上进行持续集成和测试之外,您还指的是什么?或者除了使用设计来抽象实现细节之外?
不,我想不到其他的了。