这些库是特定于操作系统的还是特定于编译器的?

发布于 2024-12-15 01:32:58 字数 204 浏览 0 评论 0原文

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

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

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

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

I am learning C using gcc on fedora 16. I have several questions about libraries.

  1. third party libraries (outside the OS and compiler) are OS-specific or compiler-specific or programming language-specific?

  2. is there a universal procedure to install/add libraries into compiler?

  3. what exactly libraries contain? raw source code that is meant to be compiled or machine codes?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谁人与我共长歌 2024-12-22 01:32:59
  1. 这一切都是有可能的。有些是 OS[-family] 特定的(例如 POSIX 系统上的 unistd.h),有些是编译器特定的(没有想到具体的例子),有些是特定于语言的(例如 boost 特定于 C++)

  2. 不幸的是,不。尽管在 posix 系统上,它在文件夹结构上非常标准化。

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

静态库可能包含二进制代码(不一定是可执行的原样代码),并且通常包含可用函数/类的索引,用于告诉在库中的何处查找内容。

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

天空是极限。

  1. That's all possible. Some are OS[-family] specific (like unistd.h on POSIX systems), some are compiler specific (no specific example comes to mind), some are language specific (e.g. boost is specific to C++)

  2. No, unfortunately. Though on posix systems it is very standardized upon folder structures.

  3. That depends on the definition of "library". There are header-only libraries, there are libraries that you can use by integrating the source files into your build process (e.g. sqlite comes with a single source file, called "the amalgamination"), some come in binary form. There are also libraries which are loaded at runtime (shared objects on POSIX, Dynamically Linked Libraries on windows).

Static libraries may contain binary code (which is not necessarily executable-as-is code), and usually indices of available functions/classes which tell where to find what in the library.

Dynamic libraries usually contain position independent code, which is, apart from having relative addresses internally, executable.

The sky is the limit.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文