关于C++项目的环境配置和lib的总结

时间:2021-04-20 17:15:18

C++项目的环境配置

一般情况下的环境配置(库文件包含.h和lib文件,可以这么认为.h文件包含了函数的声明,而lib链接文件包含了函数的定义)

      实际上从前两年开始学习编程,大部分时间都是写的C或者C++项目。在VS2010,VS2010,VS2015等软件上利用OpenGL,Directx11等程序库来编写C++项目,这个时候往往在调用相关C++库的时候,我们得预先给编程软件VisualStudio 配置好C++库的相关环境。

     一般来说我们下载的C++编程库,一般都包含include和lib两个文件夹,如DirectxSDK june2010 软件开发包就包含了Directx11的早期版本,如下所示:

关于C++项目的环境配置和lib的总结

来看看include文件夹里面包含.h头文件,一般而言这些.h文件仅仅有函数的声明,da

关于C++项目的环境配置和lib的总结


而lib文件夹包含两个文件夹X64和X86,这两个文件夹都包含了lib链接库文件,如下所示:

关于C++项目的环境配置和lib的总结


下面正式讲解我们的C++项目的环境配置,如下所示,我们创建的C++项目(Win32项目或者Win32控制台程序)中,对项目右键,点击属性,进入属性配置表,如下所示:

关于C++项目的环境配置和lib的总结


然后环境配置一般分三步:

第一步,把刚才的 DirectSDKJune2010 的 include 文件夹的路径复制进入VC++目录的包含目录,我的include文件夹的路径目录为

C:\Program Files (x86)\june 2010 directx11\Include,配置如下所示:

关于C++项目的环境配置和lib的总结


第二步,把刚才的 DirectSDKJune2010 的 lib 文件夹的X86 路径复制进入VC++目录的库目录,我的lib的X86文件夹的路径目录为

C:\Program Files (x86)\june 2010 directx11\Lib\x86,配置如下所示:


关于C++项目的环境配置和lib的总结


说一下这里为什么是X86呢,因为我们的项目一般是在X86平台上运行的,如下所示:

关于C++项目的环境配置和lib的总结


第三步,在链接器->输入->添加依赖项中,添加相应的依赖库,我们这次有D3DX11.lib,D3D11.lib,DXGI.lib,Pdh.lib,Dinput8.lib,dxguid.lib。如下所示:

关于C++项目的环境配置和lib的总结


其实一般而言很多库的配置和Directx11库的配置都是差不多这个步骤的。


特殊情况下的C++项目的环境配置(库文件包含.h和.cpp文件,可以这么认为.h文件包含了函数的声明,.CPP文件包含了函数的定义)

我配置过使用OpenGL的一些库,库文件仅仅有.h文件和.cpp文件,比如封装了OpenGL的库glad库,其库文件不存在lib链接文件,仅仅包含了.h和.cpp文件,这个时候我们可以像上面的“一般情况下的环境配置”那样进行第一步的include文件的配置,然后把剩余的.cpp文件添加到项目



特殊情况下的C++项目的环境配置(库文件仅仅包含hpp文件,hpp文件为特殊的C++文件格式,函数的声明和定义都位于.hpp文件)

这个情况我在使用OpenGL的数学库glm库中见过。hpp文件大致的情况可以从 http://baike.sogou.com/v27318553.htm?fromTitle=HPP 了解。这个时候我们可以像上面的"一般情况下的环境配置"那样讲.hpp文件的路径放到C++项目的包含路径里,这样环境就配置好了。


关于lib文件的总结

上面我们的”一般情况下的环境配置里“使用了lib文件,我们可以认为lib文件包含函数的定义。那么我们如何像那些公开使用的C++库一样,将我们声明和定义的函数转变为.lib文件。下面我从一个C++控制台程序慢慢演示。

我们三个文件:HelloWorld.h,HelloWorld.cpp,main.cpp

HelloWorld.h (包含函数的声明)

#include<iostream>
using namespace std;

void PrintHelloworld();


HelloWorld.CPP (包含函数的定义)

#include"HelloWorld.h"

void PrintHelloworld()
{
cout << "HelloWorld" << endl;
}

main.CPP (测试程序)

#include"HelloWorld.h"

int main()
{
PrintHelloworld();
return 0;
}


输出看到结果:

关于C++项目的环境配置和lib的总结

下面怎么生成我们的"PrintHelloworld"函数的库呢,一步步看下面操作,右键我们的项目,点击属性-->配置属性-->常规-->配置类型,将”应用程序(.exe)“改为”静态库(.lib)“,然后运行我们的程序,在项目的根目录下Debug文件夹下生成我们的HelloWorld.lib文件(当然这个文件夹也存放了我们的.exe应用程序文件),如下所示:

关于C++项目的环境配置和lib的总结


之后我们在桌面创建一个文件夹HelloWorld存放刚才项目中的HelloWorld.h和HelloWorld.lib文件,如下所示:

关于C++项目的环境配置和lib的总结


关于C++项目的环境配置和lib的总结


我们再次创建一个C++控制台程序,仅有一个main.CPP

#include"HelloWorld.h"

int main()
{
PrintHelloworld();
return 0;
}


我们又回到了“一般情况的配置文件”的三个步骤了:

第一步,将include文件夹路径复制进入VC++目录的包含目录,如下所示:

关于C++项目的环境配置和lib的总结


第二步,把lib文件夹的路径放入VC++目录的库目录,如下所示:

关于C++项目的环境配置和lib的总结


第三步,在链接器->输入->添加依赖项中,添加相应的依赖库,我们这次添加HelloWorld.lib,如下所示

关于C++项目的环境配置和lib的总结


然后运行我们的程序,得到与上面拥有三个文件(HelloWorld.h,HelloWorld.CPP,main.cpp)一样的输出结果,如下所示:

关于C++项目的环境配置和lib的总结



C++项目的环境配置会遇到的问题

error无法解析的外部符号XXXXX

这个错误说明了你在“一般情况的配置环境中”忽略了第三部或者说你还没有链接定义了包含了XXX相应方法或者XXX相应符号的lib,比如说我上一步我们将“HelloWorld.lib”从属性--》配置属性--》链接器--》输入--》附加依赖库  去除,如下所示:
关于C++项目的环境配置和lib的总结

运行程序我们得到下面的错误:

关于C++项目的环境配置和lib的总结

此时我们的解决方法有两个:一个是再次实行“一般情况的环境配置”的第三步,或者在程序中加入 #pragma comment(lib, "HelloWorld.lib"),如下所示:

关于C++项目的环境配置和lib的总结


可能你又会问,有些c++库的lib有很多个,我怎么知道我使用的那个函数或者符号位于哪个lib,其实你根据相应的函数名或者符号名使用百度或者谷歌或者在微软的msdn查一下就知道了。