lib静态链接库,dll动态链接库,h文件
最近在弄摄像头,发现我在调用摄像头自带的函数的时候,库没连接上,于是经过高人指点,学习了一下lib静态链接库,dll动态链接库来补充一下自己的基础知识。
一、首先我们来介绍一下lib静态链接库。
lib静态链接库是在编译时要用到,如果只需要编译源代码的话只要有.lib文件就好了。下面主要讲一下在vs2010中如何使用自己建立的.lib文件,以及如何使用lib文件。
1、建立lib文件:首先在vs当中先建一个工程文件,然后单击下一步,选择lib静态链接库,紧接着就是建立自己的.h文件了,在h文件当中主要声明数据,函数,或者类,然后再.cpp源文件中实现相应的函数或者类。这是生成lib文件的过程。
2、调用生成的lib文件:在上面已经生成lib文件之后,就是如何调用这个文件了,记得我在学习opencv的时候调用opencv的库文件的情形,发现这个跟那个其实是一样一样的。主要就是添加两个文件:h文件和lib文件。
主要分三步:
第一步是包含头文件的路径:在项目工程属性中VC++目录下的包含目录中包含刚开始建立的lib文件的头文件(h文件)的路径。
第二步是包含所建的静态链接库的文件所在的路径(这里的路径是你把生成的lib文件拷贝到所在的路径):在项目工程属性中VC++目录下的库目录包含刚刚生成的lib文件的文件夹路径(这里的路径只是定位到这个库文件的文件夹)。
第三步是在项目工程属性中的连接器下的输入项中的附加依赖项中输入刚刚生成的lib文件的名称(包括后缀名)。就这样子可以实现调用自己建立的库函数了。
在第三步当中其实也可以在程序中用#pragma comment(lib,"...\\testlib.lib")语句代替。
好了,接下来就是介绍dll动态链接库了。
这样子就实现了生成静态库了,以及调用静态库了。
二、动态链接库是在运行时需要用到。动态链接库包括两个文件:dll文件和lib文件。当然h文件也是不能少的。下面介绍如何生成dll文件和lib文件(这个lib文件跟上面的静态文件是不一样的。这个lib文件只包含数据,函数,类的声明部分,并没有包含实现部分。而上面的静态链接库包含了声明和实现部分。)
跟静态链接库一样,首先要建立自己的动态链接库文件。
1、生成dll文件和lib文件(此处有点复杂):首先同样新建一个项目工程文件,单击下一步,选择dll动态链接库,然后就是建立h文件,这里的h文件中的代码可以参考:
#ifndef TestDll_H_
#define TestDll_H_
#ifdef dll //这是动态文件的名称
#define dll extern "C" _declspec(dllimport) ///为了更好的处理静态变量(当这句话省略的时候无法处理静态变量)
#else
#define dll extern "C" _declspec(dllexport) ///将文件名称导出到lib文件中
#endif
dll int Add(int plus1, int plus2);//这部分是定义相应的数据,函数,类的声明(这里需要注意的是声明部分是类的时候,类的关键字class是在动态文件名称的前面)。
//You can also write like this:
//extern "C" {
//_declspec(dllexport) int Add(int plus1, int plus2);
//};
#endif
,然后就是添加源文件(.cpp)。可以参考下面的程序:
#include "stdafx.h"
#include "testdll.h"
#include <iostream>
using namespace std;
int Add(int plus1, int plus2) //这是函数,类的实现部分
{
int add_result = plus1 + plus2;
return add_result;
}
第三步最重要的是:首先单击项目工程文件,选择添加,在选择新建项,在选择模块定义文件(.def文件)。然后在.def文件中的代码至关重要(我在这里出错了)。代码如下:
LIBRARY "dll"//指明生成哪个dll文件,即知名生成的dll文件的名称。
EXPORTS
Add @1 //sample @1 这里的sample是你要在VB中调用的函数名,@1表示该函数在DLL中的编号,每个函数都不一样,按照编写的顺序来的,第一个函数就是1,第二个函数就是2,以此类推。
2、调用上面生成的dll文件和lib文件(此处有点复杂):这个调用跟上面的静态函数的调用是一样的,也是需要包含头文件的目录,和库(上面跟dll文件一起生成的lib文件)文件的路径,最后是连接器中的添加附加项中输入库文件的名称(上面跟dll文件一起生成的lib文件的全称,包括后缀名)。增加一个操作把上面生成的dll文件拷贝到你需要用调用的exe文件同目录下即可。
这样子就实现了生成动态文件和调用动态文件了。
lib静态链接库,dll动态链接库,h文件的更多相关文章
- linux下静态链接库和动态链接库
关于链接库的知识,网上太多资料了,但是并不代表我很熟悉.今天遇到了 一个问题,就是由于静态链接库和ubuntu系统不兼容导致的,虽然花了点时间才搞定 但是,其中暴露的问题也不少. 没有区分好静态链接库 ...
- (C#)WPF:.h(头文件)、.lib(静态链接库文件)和.dll(动态链接库文件)之间的区别与联系
静态链接库(Lib)与动态链接库(DLL)的区别 静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件:动态链接就是把调用的函数所在文件模块(DLL)和 ...
- 动态链接库dll,导入库lib,静态链接库lib
目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库” ...
- vc下的静态链接库与动态链接库(一)
一.静态库与动态库的区别 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Lib ...
- [拾零]C/C++_代码复用的实现_静态链接库_动态链接库_使用.def导出
1 静态链接库 1.1 创建静态链接库: 1.在VC6中创建项目:Win32 Static Library 2.在项目中创建两个文件:xxx.h 和 xxx.cpp 3.编译 1.2 使用静态链接库 ...
- 介绍静态链接库和动态链接库的差别,及在VC++6.0中的建立和使用
首先介绍一下链接库:链接库分为动态链接库和静态链接库两种 LIB是静态链接库,在程序编译连接的时候是静态链接,其相应的文件格式是.lib. 即当程序採用静态链接库的时候..lib文件里的函数被链接到终 ...
- linux c静态链接库与动态链接库
库函数是我们编程的时候经常用到的,我们协作编程的时候可以将常用的函数封装成库供大家使用,这样能够提高大家的工作效率.对于库函数,它分为动态链接库和静态链接库.对于静态链接库我们必须是连接到可执行文件中 ...
- Linux环境下c语言静态链接库和动态链接库创建和使用
库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 面对比一下两者: 静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功, ...
- linux静态链接库与动态链接库详解
一顺便说说了哦 通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(e ...
随机推荐
- 如何连接git bash和git hub
git config --global user.name "Your Real Name" 2 git config --global user.email you@email. ...
- ios CoreBluetooth 警告 is being dealloc'ed while pending connection
ios CoreBluetooth 警告 is being dealloc'ed while pending connection CoreBluetooth[WARNING] <CBPerip ...
- iOS 静态类库 打包 C,C++文件及和OC混编
iOS 静态类库 编译 C,C++ 我们都知道,OC 原生支持C, 在 创建的 OC类的 .m 里面,可以直接编写C的代码: 同样 Xcode 也支持 OC ,C++的混编,此时,我们通常把OC创建的 ...
- mongodb配置及简单示例
安装 在官网下载安装 https://www.mongodb.com/ 配置 我的电脑—>右键属性—>左边列表中的高级程序设置—>环境变量 点击path 把你的mongodb文件路径 ...
- 如何使用Retrofit获取服务器返回来的JSON字符串
有关Retrofit的简单集成攻略,大家可以参考我此前的一篇文章有关更多API文档的查阅请大家到Retrofit官网查看. 在大家使用网络请求的时候,往往会出现一种情况:需要在拿到服务器返回来的JSO ...
- viewDidLoad && loadView
viewDidLoad 方法在controller加载了相关的views后被调用,而不论这些views存储在nib文件里还是在loadView函数中生成. loadView 方法在控制器的 view ...
- OC 实例变量(Instance Var)和成员变量(member var)区别
摘要: Objective-C 引入了“实例变量"的概念,但同时, 也经常出现 “成员变量”的声音. 到底什么是实例变量,什么是成员变量,二者的区别是什么呢? 今天查看apple 的官方 ...
- android:ems
<EditText android:id="@+id/qq_number" android:layout_width="wrap_content" and ...
- SELECTION-SCREEN 文本丢失
最近有点无聊....随便找点东西填了... 自从系统上线,经常出现程序的的文本丢失,然后选择界面就变成英文的了....一直在出现,就是解决不了,不知道到底是哪里的问题 严重怀疑是服务器上文件丢失... ...
- Wilcoxon test
clear load NPSVOR name={'SCV1V1','SVC1VA','SVR','CSSVC','SVMOP','NNOP','ELMOP','POM',... 'NNPOM', 'S ...