unk*_*own 7 c windows linker compilation
我确定这个问题已被多次询问过,但我无法弄清楚这一点.忍受我.
所以当你下载一个库时,你会得到一堆.c和.h文件,还有很多其他东西.现在假设您要使用此库编写程序.
我将所有.h文件复制到我的项目目录中.它只是不编译.
很好,所以我把库作为一堆.dll的,然后我将dll复制到我的项目目录中.仍然没有编译.
这是如何运作的?
你做了什么,比如在为你的项目创建文件夹之后呢?您将库包的哪些部分复制/粘贴到文件夹中?你是怎么做到它可以编译的?请跟我走一步.
谢谢.
(我正在努力工作的库是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链接.)
希望有所帮助.
在windows下执行(假设您使用Visual Studio)
解压缩后,将库包含目录添加到项目的设置中(项目 - >属性 - > C/C++ - >其他包含目录)
对库目录执行相同的操作(项目 - >属性 - >链接器 - >其他库目录)
在链接器输入中指定库的名称:项目 - >属性 - >链接器 - >输入 - >附加依赖项
希望这之后应该编译.
我不建议将上面的目录添加到Visual Studio中的全局设置(工具 - >选项 - >项目和解决方案),因为它将创建和环境,在您的计算机上编译某些内容并且不在另一个上编译.
现在,艰难的方法,为基于Makefile的构建系统做到这一点:
最后你应该有一个丑陋的命令,看起来像:
g ++ -I/work/my_library/include -L/work/my_library/lib -lmylib my_static.a -o appname_exe MYFILE.CPP
(上面的一行并没有真正测试过一般的想法)
我建议去,从某个地方获取模板makefile并添加你所有的东西.
| 归档时间: |
|
| 查看次数: |
8172 次 |
| 最近记录: |