库如何实现不同操作系统之间的可移植性

Posted

技术标签:

【中文标题】库如何实现不同操作系统之间的可移植性【英文标题】:how can libraries achieve portability among different OS 【发布时间】:2015-05-13 19:45:06 【问题描述】:

类似于 c/c++ 标准库。

由于标准库中的函数最终会调用特定的操作系统 API 来完成它的工作,如果我想编译我的代码以在其他操作系统上运行,这些语言库如何实现可移植性。 这些库会改变它的代码(对特定操作系统 API 的调用)吗?这些库的不同版本是否针对不同的操作系统?要不然是啥 ? 提前致谢。

【问题讨论】:

Creating a portable library to run on both linux and windows的可能重复 这是预处理器指令的重要用途之一。 @big.heart 是的。您基本上有代码来处理程序中的每个操作系统,并且您使用预处理器来确定实际使用的代码。 另见***.com/questions/5919996/… @big.heart 通常每个操作系统都有一个单独的 .dll(或 .so 用于 linux 或 .dylib 用于 OS X)。 【参考方案1】:

一个简单的例子..

#ifdef OS_WINDOWS
   //definition for Windows
#else
  //define it for Unix
#endif

他们使用预处理器来确定操作系统,使用一些指针技巧来确定字节顺序。一般没有什么太复杂的。 一旦 stds 确定操作系统,使用预定义的定义.. 他们使用相关的适当代码。

// Real-life example:
if(definition == 2) system("cls");
else system("clear");

【讨论】:

以上是关于库如何实现不同操作系统之间的可移植性的主要内容,如果未能解决你的问题,请参考以下文章

在不同进程之间传递文件描述符的可移植方式

如何打包面向 .NET Core 的可移植 .NET 库?

mysql 必知必会整理—sql 计算函数[六]

MySQL基础之MySQL必知必会使用数据处理函数

VS2008的32位的程序如何移植到64位的系统,具体操作上的问题

反应式系统实现MQTT客户机