共享库和语言标准

Shared libraries and language standards

本文关键字:语言标准 共享      更新时间:2023-10-16

当然,C99和c++标准都不知道共享库。为什么呢?

编辑:写共享库而不复制Linux/Windows版本的好做法是什么?

谢谢。

因为共享库是操作系统的一个特性。

与任何特定语言无关

我可以想到几个原因,为什么这在1999年(就像1999年的情况一样)甚至2011年是有意义的:

  • 仍然有一些使用C和c++的系统没有共享库。(嵌入式)。如果标准强制要求某些东西,那么对于那些目标平台的编译器/库实现者来说,生活就不必要地困难了,因为这些平台与共享库的问题无关。

  • 不同的操作系统对于共享库有不同的设计选择。如果标准规定了什么,就会限制这些选择。这里也有很多棘手的遗留问题需要考虑,因为共享库实现随着时间的推移而发展。

与C和c++中的许多东西一样,在语言本身没有明确规定的地方,其他更特定于平台的标准做得很好。根据我刚才查找的手册,POSIX.1-2001指定了dlopen等。如果你的目标是Windows,你知道在哪里可以找到LoadLibrary/GetProcAddress。Windows的__declspec需求也可以封装在一个宏中。如果您同时关心Windows和POSIXy系统,那么编写一个做适当事情的层并不太难。

如何编写共享库,作者:Ulrich Drepper,
阅读第一页关于他们和他们的历史。