gpt4 book ai didi

c - 是否每个用于构建程序的库都需要使用 gcc 中的标志进行链接?

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:11 25 4
gpt4 key购买 nike

我是 C 的新手。我在 Ubuntu 12.04 中编码。我刚刚面对 this problem并使用为该问题提供的解决方案(using -lncurses flag while compiling with gcc)解决了它。

我的问题是,

  1. 我们是否必须明确提及我们程序中使用的每个库作为 gcc 的标志,以便它可以链接到目标文件?

  2. 如果我们必须这样做,为什么要在我们的程序顶部编写头文件,如 #include<stdio.h> or #include` ?

  3. 我们是否必须维护一些顺序,以将此库标志写入 gcc 中?命令。因为of a statement in this answer说订单很重要?什么决定标志的顺序?

提前致谢。

最佳答案

  1. 通常,是的。一些库使用名为 pkg-config 的脚本来告诉您如何链接;例如pkg-config --libs libzip 将为 libzip 提供链接器标志,即 -lzip -lz

  2. header 包含函数声明、数据结构定义以及与编译器 相关的其他内容,但不包含与链接器 相关的信息。这是一个历史性的意外;它已在 Plan 9 C 编译器中得到修复,我也相信 Microsoft 的编译器,但不在常见的 Unix/Linux 编译器中。

    请注意,标题和库不是一一对应的。例如。一些库是“只有头文件”的,而一些包括 libc 在内的库有很多头文件。在其他情况下,库的多个版本可用(通用版本、调试版本、针对某些处理器的优化版本,...),所有版本都具有相同的 header 。

  3. 我相信这取决于 GCC 版本,但我从来没有弄清楚哪些版本需要严格排序,哪些不需要。安全的选择是以反向依赖顺序链接库;所以如果 libfoo 使用 libbar,首先链接 libfoo,然后是 libbar。前面提到的 pkg-config 也会为支持它的库处理这个问题。

关于c - 是否每个用于构建程序的库都需要使用 gcc 中的标志进行链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com