c - 你实际上是如何使用 C 库的?

标签 c windows linker compilation

我敢肯定这个问题已经被问过很多次了,但我想不通。请耐心等待。

因此,当您下载一个库时,您会得到一堆 .c 和 .h 文件,以及许多其他内容。现在假设您想使用该库编写一个程序。

我将所有 .h 文件复制到我的项目目录中。它只是无法编译。

太好了,然后我将库作为一堆 .dll 获取,并将这些 dll 复制到我的项目目录中。仍然无法编译。

这是如何工作的?

您会做什么,比如在为您的项目创建文件夹之后?您将库包的哪些部分复制/粘贴到文件夹中?你如何制作它以便它可以编译?请和我一起完成这些步骤。

  1. .h 文件放在哪里?
  2. .dll 文件放在哪里?
  3. 如何编译?

谢谢。

(我尝试使用的库是 libpng,我在 Windows 中使用 MinGW,我希望像往常一样从命令行编译。)

(据我所知,您将 .h 文件放在目录 A 中,将 .dll 文件放在目录 B 中,您可以使用 -l 和 -L 编译器选项来告诉编译器在哪里可以找到它们,这是正确的吗? )

最佳答案

以下是编译和构建基本 C 项目时发生的情况的简要指南:

  • 第一阶段编译您所有的源文件 - 这会获取您编写的源文件并将它们翻译成所谓的目标文件。在这个阶段,编译器需要知道你在代码中使用的所有函数的声明,即使是在外部库中,所以你需要使用 #include 来包含你使用的任何库的头文件。 这也意味着您需要告诉编译器这些头文件的位置。使用GCC您可以使用 -I 命令行输入要搜索头文件的目录。

  • 下一阶段是将所有目标文件链接到一个可执行文件中。在此阶段,链接器需要解析对外部库的调用。 这意味着您需要对象形式的库。大多数库都会为您提供有关如何生成它或可能提供现成的库的说明。在 Linux 下,库文件通常是一个 .a.so 文件,尽管它可能只是一个 .o。同样,您可以使用 -L 选项将库目标文件的位置提供给 GCC。

因此你的命令行看起来像这样:

gcc myProg.c -I/path/to/libpng/include -L/path/to/libpng/lib -lpng -o myProg.exe

(请注意,当使用 -l 命令行时,GCC 会自动将 lib 添加到库的开头,因此 -lpng 会导致 libpng.a 链接进来。)

希望对您有所帮助。

关于c - 你实际上是如何使用 C 库的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1749079/

相关文章:

html - 谷歌浏览器在 Windows 和 Ubuntu 中的不同 CSS 结果

windows - 如何在 Visual Studio 中使用 OpenSSL

c - 如何在 macOS 上使用 C 语言在 Visual Studio Code 中启动调试?

c++ - 如何统计n个线程和fork()的创建和终止时间?

c++ - 使用 WSASend 的一些 OVERLAPS 没有使用 GetQueuedCompletionStatus 及时返回?

windows - Cloudformation CFN-Init Windows Powershell 问题

linux - 我的 Linux 可执行程序中的段 00 是什么(64 位)

linux - 链接时未定义对符号 'socket@GLIBC_2.4' 的引用

c - 如何调整使用 wglCreateContext 创建的 openGL 窗口的大小?

c - 解释格式说明符 %f 以及点在其中如何工作