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 ...
随机推荐
- html 实体 => htmlspecialchars
因为没有办法判断用户输入的数据是否安全, 可能含有和sql语句相冲突的字符,比如 ' " < >,那就有一个办法, 把这些特殊字符处理一下,比如吧空格符号变成 ,这样sql语句 ...
- 悟透javascript读书笔记
1.undefined,null,0,"" 这四个值转换为逻辑值时是false,其他无论简单类型值,对象或者函数转换过来都是true 2.如图 第一个是“声明了一个变量,给变量赋 ...
- 错误 undefined reference to __cxa_guard_acquire/release
用gcc编译 c++ 程序时,出现错误 undefined reference to __cxa_guard_acquire linker error, 但是用icc可以正常编译, 问题出在stati ...
- androidStudio中如何加载字体资源?
在android中字体的格式总是不能尽善尽美的显示出来 , 于是要求我们使用一些有美感的字体,加载的方式(就像HTML的字体一样),我们需要通过加载字体的方式来使用android中不曾提供的字体; ...
- 179. Largest Number -- 数字字符串比较大小
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- 详解下一代开源混合应用框架Reapp(转)
http://www.iteye.com/news/30269 官网:http://reapp.io/ [开源推荐]Facebook开源的JavaScript库:React http://www.cs ...
- Excel VBA记录
-----------快捷键---------- 函数等提示(默认):ctrl+j 注释:上单引号' 设置单元格为空可以用:empty/null -----------基础语法--------- 基本 ...
- 盘点:崛起中的九大HTML5开发工具
HTML5被看做是Web开发者创建流行Web应用的利器,增加了对视频和Canvas 2D的支持.HTML5的诞生还让人们重新审视浏览器专用多媒体插件的未来,如Adobe的Flash和微软的Silver ...
- [转]Windows的窗口刷新机制
1.Windows的窗口刷新管理 窗口句柄(HWND)都是由操作系统内核管理的,系统内部有一个z-order序列,记录着当前窗口从屏幕底部(假象的从屏幕到眼睛的方向),到屏幕最高层的一个窗口句柄的排序 ...
- ASP.NET-遇到的错误汇总
错误:“未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序.” 在win7 64未上,读取Excel中的数据时报的错误, 解决方法:在生成"配置管理器中" ...