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 ...
随机推荐
- phalcon:model 事件与事件管理器
事件与事件管理器(Events and Events Manager)¶ Models allow you to implement events that will be thrown when p ...
- Machine Learning - 第4周(Neural Networks: Representation)
Neural networks is a model inspired by how the brain works. It is widely used today in many applicat ...
- ASP.NET Core文档中Work with Data章节的翻译目录
作为初学者看了相关的教程,遇到的问题有: 1. 教程不是针对初学者,往往在某一方面教的较深,但并不系统,不适合初学者: 2. 虽然翻译的很顺畅,但是谈了自己较多的开发体会,初学者看着困难,尤其是TOM ...
- 华为面试题——约瑟夫问题的C++简单实现(循环链表)
/* author:jiangxin Blog:http://blog.csdn.net/jiangxinnju Function:method of Josephus que ...
- echarts折线图--数据交互
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- <mvc:annotation-driven />注解意义
<mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案. <mvc:annotation-dr ...
- php-fpm的重启/关闭
php 5.3.3 下的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,需要使用信号控制: ...
- smartGit30天试用过期
Windows: %APPDATA%\syntevo\SmartGit\OS X: ~/Library/Preferences/SmartGit/Unix/Linux: ~/.smartgit ...
- Octopus系列之更新历史记录
更新笔记历史 2015.2.3 更新了产品价格的计算方法 --采用了通用化的一个处理[支持各个国家货币]更新产品价格,增加两组价格:一组用来进行前台的展示:一组用来进行后台的计算更新了产品分类 ...
- 如何选择linux 版本
1.linux 桌面系统,首先选择Ubuntu2.服务器断的linux系统,首选RHEL 或者Centos3.如果对安全性能比较高,选择Debian 或FreeBSD4.需要使用数据库高级服务和电子邮 ...