你如何实际使用C库?

unk*_*own 7 c windows linker compilation

我确定这个问题已被多次询问过,但我无法弄清楚这一点.忍受我.

所以当你下载一个库时,你会得到一堆.c和.h文件,还有很多其他东西.现在假设您要使用此库编写程序.

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

很好,所以我把库作为一堆.dll的,然后我将dll复制到我的项目目录中.仍然没有编译.

这是如何运作的?

你做了什么,比如在为你的项目创建文件夹之后呢?您将库包的哪些部分复制/粘贴到文件夹中?你是怎么做到它可以编译的?请跟我走一步.

  1. 在哪里放.h文件?
  2. 在哪里放.dll文件?
  3. 怎么编译?

谢谢.

(我正在努力工作的库是libpng,我在使用MinGW的Windows中,我希望像往常一样从命令行编译.)

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

Mar*_*Pim 13

这是编译和构建基本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
Run Code Online (Sandbox Code Playgroud)

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

希望有所帮助.

  • 这家伙显然是新手,询问 DLL 文件(Windoze),您告诉他将 GCC 与 .a 文件一起使用? (2认同)

Fer*_*eak 8

在windows下执行(假设您使用Visual Studio)

  • 解压缩后,将库包含目录添加到项目的设置中(项目 - >属性 - > C/C++ - >其他包含目录)

  • 对库目录执行相同的操作(项目 - >属性 - >链接器 - >其他库目录)

  • 在链接器输入中指定库的名称:项目 - >属性 - >链接器 - >输入 - >附加依赖项

希望这之后应该编译.

我不建议将上面的目录添加到Visual Studio中的全局设置(工具 - >选项 - >项目和解决方案),因为它将创建和环境,在您的计算机上编译某些内容并且不在另一个上编译.

现在,艰难的方法,为基于Makefile的构建系统做到这一点:

  • 打开你的东西
  • 在-I g ++标志下指定include目录
  • 在-L g ++标志下指定Library目录
  • 指定要使用的库,如:-llibrary name(例如:-lxml2 for libxml2.so)
  • 指定静态库,如:library name.a

最后你应该有一个丑陋的命令,看起来像:

g ++ -I/work/my_library/include -L/work/my_library/lib -lmylib my_static.a -o appname_exe MYFILE.CPP

(上面的一行并没有真正测试过一般的想法)

我建议去,从某个地方获取模板makefile并添加你所有的东西.