Windows VS C++工程:包含目录、库目录、附加依赖项、附加包含目录、附加库目录配置与静态库、动态库的调用

1.包含目录&附加包含目录

  头文件.h的索引目录,可以通过此目录完成.h文件的索引。

1.1区别和作用

  1. 作用:预编译会从该目录查找头文件,可以直接#include<该目录中的头文件>.

  2. 区别:

  • 头目录搜索的优先级不同,顺序:1、源文件目录–>2、附加包含目录–>3、包含目录
  • 包含目录:修改了系统的include宏的值,是全局的;
  • 附加包含目录:用于当前项目,对其他项目没有影响。

 编译器搜索头文件顺序:

1. 如果#include使用双引号(“”)形式,它将首先搜索本地目录。先从包含#include语句的当前文件的所在目录开始搜索。若果失败,则从当前目录的父目并逐级往上搜索,直到最上层include文件所在的目录。
2. 如果#include使用尖括号(<>)形式,或者使用双引号形式本地目录检索失败,它会按照/I选项(附加包含目录)指定的目录搜索。顺序是按照CL在命令行中遇到它们的顺序。
3. INCLUDE环境变量指定的目录,即包含目录。

 所以,对本项目自身的#include一定要用双引号,否则如果用尖括号,不会搜索本地目录,而是直接从附加包含目录开始搜索,自然就找不到本地的文件,然后报错。

1.2 设置路径

包含目录(Include Directories)

配置属性 → VC++目录 —>包含目录

C:\Users\gdgqwang\Desktop\算法模块化\CalculateFOVP_1Cross\CalculateFOVP_1Cross

附加包含目录(Additional Include Directories)

配置属性 → C/C++ → 常规 —>附加包含目录

2 库目录/ 附加库目录

寻找.lib文件的搜索目录(不是寻找DLL的搜寻目录)

2.1用途

作用:指明库文件所在的目录or路径,即寻找.lib文件的搜索目录
区别:优先级不同,先检索附加库目录,再检索库目录

2.2 设置路径 

库目录(Library Directories)

位于:配置属性→ VC++目录→ 库目录

 附加库目录(Additional Library Directories)

位于:配置属性→ 链接器→ 常规→ 附加库目录

3 附加依赖项 

lib库(C++的库会把函数、类的声明放在*.h中,实现放在*.cpp或*.cc中。编译之后,.cpp,.cc,*.c会被打包成一个.lib文件,这样可以保护源代码)

3.1用途

作用:指明依赖库文件的名称

3.2 设置路径 

位于:配置属性 → 连接器 → 输入

Debug模式下选择带_d的lib,发布的时候需要改成相应的release不带_d的 

oraocci19d.lib

3.3注意运行库的设置 

4 静态链接库生成与调用方法

4.1 生成

第一步:创建工程--win32项目--My_Static_lib_1

第二步:选择静态库,预编译头和安全开发生命周期(SDL)检查选择不要

 第三步:编写头文件static.h

#ifndef STATIC_H  //防止头文件重定义
#define STATIC_H
int sum(int m, int n);
#endif

第四步:编写源文件 static.cpp 

#include "static.h"
int sum(int m,int n)
{
                return m + n;
}

第五步:生成解决方案 

之后你会在工程的release目录下发现生成了一个静态库 My_Static_lib.ib 

4.2 调用

-(1) 要使用一个静态库,除了要include其头文件以外(附加包含目录),还要在链接过程中把lib加进去(附加库目录、附加依赖项)。

-(2)附加包含目录、附加库目录、附加依赖项的添加方法及说明:

① 附加包含目录—添加工程的头文件目录:
项目->属性->配置属性->C/C+±>常规->附加包含目录:加上头文件的存放目录;

② 附加库目录—添加文件引用的lib静态库路径:
项目->属性->配置属性->链接器->常规->附加库目录:加上lib文件的存放目录;

③ 附加依赖项—添加工程引用的lib文件名:
项目->属性->配置属性->链接器->输入->附加依赖项:加上lib文件名。

 -(3)在cpp文件中,添加头文件的引入,include<CalculateFOVP_1Cross.h>,然后可以直接

调用静态库中的函数。

 5.动态库链接库调用方法(此时lib文件是dll的引导文件)

5.1 动态库的生成 

动态库的生成与静态库十分类似:

第一步:新建项目,win32,win32项目,输入项目名称,例如MakeDll。

第二步:选择“DLL”选项,再点“完成”:

第三步:菜单栏选择”项目“——>”添加新项“,来创建头文件MakeDll.h

MakeDll.h中输入以下例子代码:

#ifdef DLL_API //如果已经定义就什么都不做
    //nothing to do
#else //否则定义DLL_API
    #define DLL_API __declspec(dllexport)    //_declspec(dllexport):导出标志
#endif
#include <iostream>
using namespace std;
extern "C" DLL_API int addfun (int a, int b);//导出单独的函数
class DLL_API Point    //导出类,其自身所有函数都将被导出,可单独对某些类函数导出
{
private:
    float x, y;
public:
    Point();
    void SetPoint(float a, float b);
    void DisPlay();
};

第四步:创建cpp文件:MakeDll.cpp

MakeDll.cpp中输入以下例子代码:

#include "MakeDll.h"
int addfun(int a, int b)
{
    return a + b;
}
Point::Point()
{
    x = 0.0f;
    y = 0.0f;
}
void Point::SetPoint(float a, float b)
{
    x = a;
    y = b;
}
void Point::DisPlay()
{
    cout << "x=" << x << endl;
    cout << "y=" << y << endl;
}

第五步:菜单栏选择”生成——>生成解决方案“。

此时在MakeDll项目所在目录下的Debug或者release的文件有MakeDll.dll和MakeDll.lib了。生成动态链接库文件OK。

 注意:此时的MakeDll.lib文件不是静态库文件,是dll文件的引导文件

 5.2隐式调用

   隐式调用和静态库的调用方法相同,唯一的区别就是需要把DLL放在工程运行目录下。

// 可以代替在附加依赖项里添加 lib名称 的操作
//#pragma  comment(lib,"CalculateFOVP_1Cross.lib") // 表示链接库文件

5.3显示调用

 只需要用到DLL文件 

			// ================显性调用Dll=================
			clock_t start, end;
			start = clock(); // 开始计时 

			//使用类型定义关键字typedef,定义指向和Dll
			typedef int(*lpCalculateFOVP)(int, int bit, double param[5][2], int, double*, int*,char *);
			lpCalculateFOVP CalculateFOVP;
			HMODULE  hDll = LoadLibrary("../DLL_lib/CalculateFOVP_1Cross.dll");//加载动态链接库到内存
			if (hDll != NULL)
			{
				CalculateFOVP = (lpCalculateFOVP)GetProcAddress(hDll, "CalculateFOVP_1Cross"); //动态获得DLL函数的入口地址
				if (CalculateFOVP != NULL)
				{
					Error = CalculateFOVP(i_ImageHandl, 8, param, sign, FOVPData, o_ImageHandl, o_message);
				}
			}
			else
			{
				cout << "DLL未加载成功,请检查" << endl;
			}
			FreeLibrary(hDll);						//显式地从内存中把它给卸载

			end = clock();   // 计时结束  
			double enttime = (double)(end - start) / CLOCKS_PER_SEC;
			cout << "Total time:" << enttime * 1000 << "ms" << endl;
			// ================显性调用结束=================

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值