【发布时间】:2011-11-11 18:29:10
【问题描述】:
我正在 Fedora 16 上使用 gcc 学习 C。我有几个关于库的问题。
第三方库(在操作系统和编译器之外)是特定于操作系统的、特定于编译器的还是特定于编程语言的?
是否有一个通用的程序可以将库安装/添加到编译器中?
库究竟包含什么?要编译的原始源代码还是机器代码?
提前致谢
【问题讨论】:
标签: compiler-construction libraries fedora
我正在 Fedora 16 上使用 gcc 学习 C。我有几个关于库的问题。
第三方库(在操作系统和编译器之外)是特定于操作系统的、特定于编译器的还是特定于编程语言的?
是否有一个通用的程序可以将库安装/添加到编译器中?
库究竟包含什么?要编译的原始源代码还是机器代码?
提前致谢
【问题讨论】:
标签: compiler-construction libraries fedora
这一切皆有可能。有些是特定于 OS[-family] 的(例如 POSIX 系统上的 unistd.h),有些是特定于编译器的(没有想到具体的例子),有些是特定于语言的(例如 boost 是特定于 C++ 的)
不,很遗憾。尽管在 posix 系统上,它在文件夹结构上非常标准化。
这取决于“库”的定义。有一些只有头文件的库,有一些库可以通过将源文件集成到构建过程中来使用(例如 sqlite 带有一个单独的源文件,称为“合并”),有些以二进制形式出现。还有一些在运行时加载的库(POSIX 上的共享对象,Windows 上的动态链接库)。
静态库可能包含二进制代码(不一定是按原样执行的代码),并且通常是可用函数/类的索引,这些索引告诉在哪里可以找到库中的内容。
动态库通常包含与位置无关的代码,这些代码除了在内部具有相对地址外,还可以执行。
天空才是极限。
【讨论】: