前言
作为一个非科班出身的程序员,开始学习c++当然是从使用宇宙第一IDE——vs开始:创建个工程,写个HelloWorld.cpp,点击那个绿色的三角。OK,一个简单的程序就写好了,也不过如此嘛,这就是我最初的想法,当然那时埋下的隐患,也让我慢慢尝到了苦果,尤其是当你需要重新编译第三方库的时候,各种问题层出不穷(众所周知相比于其他主流语言java、python之流,c++加载第三方库到目前都没有一个完善的解决方案)。而想要搭建一个slam系统不可避免的要使用到很多第三方库(opencv,eigen,pcl,ceres,g2o等等),如果不搞懂编译相关的问题,总是会碰到各种莫名其妙的问题~
那么源代码究竟是怎么由一个文本文件变化到可执行文件的?动态库、静态库、DEBUG、RELEASE、LIB、DLL都是些啥?到底有些什么用?这篇文章既是作为我学习c++的一个阶段的总结,也希望能够帮助到其他的初学者快速的了解这些基础,从而避免掉进一些本来很easy的坑。以下所讲的都是固定的套路,一次学习,终生受益哈哈~
一、c++编译过程
首先我们来看一张图:
作为程序员,我们编写的是c.cpp文件,当然这个文件计算机是读不懂的,那怎么办呢?这里需要使用一个程序——编译器(多平台上的g++,vs自己用的cl)将.cpp文件转化为.o文件(目标文件win下为.obj)这样计算机就能读懂了。也就是说一个.cpp生成了一个.obj文件,那么最后生成的可执行文件.exe是怎么来的呢?通过链接器,将我们所有用到的.obj(包括第三