VS(或通用的) 头文件的路径、库文件的路径和库连接相关问题

发布时间 2023-04-13 17:27:28作者: Toriyung

使用第三方库时就需要调用到其头文件(.hpp)和库文件(.lib和.dll),所以需要将他们路径告知工程,工程才找得到他们,下面介绍如何选择正确路径

  以VS2017为例。本次例子调用到opencv库和osqpEigen库

 

 

首先是头文件(include),程序中如此包含的

#include <opencv.hpp>
#include <Data.hpp>
#include <Settings.hpp>
#include <Solver.hpp>

即需要用到opencv.hpp,Data.hpp,Settings.hpp,Solver.hpp这几个头文件,而这几个头文件所在位置绝对路径分别是

D:\work\opencv4_x64-windows\include\opencv2
D:\work\lib\osqp-eigen\OsqpEigen

所以添加进VS工程

 

但如果程序是如此包含的

#include <opencv2/opencv.hpp>
#include <OsqpEigen/Data.hpp>
#include <OsqpEigen/Settings.hpp>
#include <OsqpEigen/Solver.hpp>

可以看出,同时include头文件和其上一层路径,即要找到其“上一层路径的所在路径”

D:\work\opencv4_x64-windows\include
D:\work\lib\osqp-eigen

因为我们此时是要找头文件的所在文件夹而不是头文件

 

然后是库路径

  先回顾下.lib和.dll

  1. .lib(静态链接库)是一种在编译时链接到程序中的库文件,其中包含一组函数和数据,这些函数和数据在程序运行时被加载到内存中。当程序链接到.lib文件时,它将包含在最终的可执行文件中,这样程序就可以直接调用库中的函数和访问库中的数据。因此,.lib文件只在编译时使用。

  2. .dll(动态链接库)是一种在运行时加载到程序中的库文件,其中包含一组函数和数据,这些函数和数据在程序运行时被加载到内存中。当程序调用.dll文件中的函数时,它将在运行时从.dll文件中加载。因此,.dll文件只在运行时使用。

  在某些情况下,程序只需要使用静态链接库(.lib文件),例如程序的规模比较小,不需要动态加载库文件,或者程序不需要共享库文件的代码和数据。

  而在其他情况下,程序需要使用动态链接库(.dll文件),例如程序规模比较大,需要加载大量的库文件,或者程序需要共享库文件的代码和数据。

讲人话:你要用到的库里面的函数,首先就得有存放函数代码的库文件,然后从里面去调用,这个库文件就是lib文件,如果库里面函数太多了,而某些时候只需要调用其中一小部分,则可以通过动态库dll,dll从lib知道函数位置然后调用。

  

  而库的路径添加就比较简单,直接找到lib的所在路径(如果代码要用到的是dll则找到lib和dll两个路径)添加进去就可以了,无需像头文件那样考虑从哪一层开始include