【问题标题】:Are the libraries OS-specific or compiler-specific?库是特定于操作系统的还是特定于编译器的?
【发布时间】:2011-11-11 18:29:10
【问题描述】:

我正在 Fedora 16 上使用 gcc 学习 C。我有几个关于库的问题。

  1. 第三方库(在操作系统和编译器之外)是特定于操作系统的、特定于编译器的还是特定于编程语言的?

  2. 是否有一个通用的程序可以将库安装/添加到编译器中?

  3. 库究竟包含什么?要编译的原始源代码还是机器代码?

提前致谢

【问题讨论】:

    标签: compiler-construction libraries fedora


    【解决方案1】:
    1. 这一切皆有可能。有些是特定于 OS[-family] 的(例如 POSIX 系统上的 unistd.h),有些是特定于编译器的(没有想到具体的例子),有些是特定于语言的(例如 boost 是特定于 C++ 的)

    2. 不,很遗憾。尽管在 posix 系统上,它在文件夹结构上非常标准化。

    3. 这取决于“库”的定义。有一些只有头文件的库,有一些库可以通过将源文件集成到构建过程中来使用(例如 sqlite 带有一个单独的源文件,称为“合并”),有些以二进制形式出现。还有一些在运行时加载的库(POSIX 上的共享对象,Windows 上的动态链接库)。

    静态库可能包含二进制代码(不一定是按原样执行的代码),并且通常是可用函数/类的索引,这些索引告诉在哪里可以找到库中的内容。

    动态库通常包含与位置无关的代码,这些代码除了在内部具有相对地址外,还可以执行。

    天空才是极限。

    【讨论】:

      猜你喜欢
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 2013-05-31
      • 1970-01-01
      • 2017-07-29
      相关资源
      最近更新 更多