共享库和语言标准

时间:2011-04-21 19:18:19

标签: c++ c shared-libraries

AFAIK,C99和C ++标准都不了解共享库。那是为什么?

编辑:在不复制Linux / Windows版本的情况下编写共享库的好习惯是什么?

感谢。

3 个答案:

答案 0 :(得分:6)

因为共享库是操作系统的一项功能。

与任何特定语言无关。

答案 1 :(得分:4)

我可以想到为什么这在1999年(如C99的情况)甚至2011年有意义的几个原因:

  • 仍然存在使用C和C ++但没有共享库的系统。 (思考嵌入式。)如果标准要求某些东西,对于那些目标共享库问题无关的平台的编译器/库实现者来说,生活是不必要的。

  • 不同的操作系统在共享库方面做出了不同的设计选择。如果标准要求某些东西,它将限制这些选择。随着共享库实现随着时间的推移而发展,这里还有许多蹩脚的遗产需要考虑。

与C和C ++中的许多内容一样,其他更多特定于平台的标准在这里做得非常好,语言本身没有指定。根据我刚查过的联机帮助,POSIX.1-2001指定dlopen等。如果您要定位Windows,则知道在哪里找到LoadLibrary / GetProcAddress。 Windows的__declspec要求也可以包含在宏中。如果你关心Windows和POSIXy系统,那么写一个做适当事情的层就不难了。我确信已经有很多书面和可用。

答案 2 :(得分:4)

"How to write shared libraries" by Ulrich Drepper
阅读关于他们的第一页和他们的历史。