AFAIK,C99和C ++标准都不了解共享库。那是为什么?
编辑:在不复制Linux / Windows版本的情况下编写共享库的好习惯是什么?
感谢。
答案 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,
阅读关于他们的第一页和他们的历史。