我敢肯定这个问题已经被问过很多次了,但我想不通。请耐心等待。
因此,当您下载一个库时,您会得到一堆 .c 和 .h 文件,以及许多其他内容。现在假设您想使用该库编写一个程序。
我将所有 .h 文件复制到我的项目目录中。它只是无法编译。
太好了,然后我将库作为一堆 .dll 获取,并将这些 dll 复制到我的项目目录中。仍然无法编译。
这是如何工作的?
您会做什么,比如在为您的项目创建文件夹之后?您将库包的哪些部分复制/粘贴到文件夹中?你如何制作它以便它可以编译?请和我一起完成这些步骤。
- .h 文件放在哪里?
- .dll 文件放在哪里?
- 如何编译?
谢谢。
(我尝试使用的库是 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/