关闭

windows下 静态/动态库的一些总结

288人阅读 评论(0) 收藏 举报
分类:
静态库:
静态库比较简单
制作静态库:
用C语言时只用一个.c文件就可以了(使用.c默认使用的是C语言的编译器),由于C编译器的缘故,不用提供头文件。使用库时只用#pragma comment(lib,"相对path") 就可以了使用了。
C++使用时也就是后缀名为.cpp时,就必须在使用的时候提供声明。所以制作静态库时也需要一个头文件。写关于函数或类的声明。同样,在使用库时也需要#pragma包含进库。(当然也可以通过编译器的设置也包含静态库)

动态库:
动态库较静态库有不少优点,但缺点就是制作和使用比较复杂
制作动态库:
写完库程序代码后,还需要将一部分信息导出到.dll文件头。导出有两种方式,一种生成.lib文件(函数名也被 改),一种不生成(函数名不会被改)。
1>声明导出:(生成.lib文件)
_declspec(dllexport)func_name(...);
2>模块定义文件导出(.def文件)
LIBRARY file_name
EXPORTS
func_name @1
...
动态库的使用:
动态库使用时最好将其与应用程序放入同一个目录里。
使用也有两种方式:
1>隐式链接
(extern "C") _declspec(dllimport)func_name(...);//这个如果是CPP库的话可以用#include "x.h"包含来代替
#pragma comment (lib,"相对path")//由于用到.lib库,所以导出方式应为声明导出
前面的extern "C"是如果使用C语言的动态库时加的
2>显式链接
定义函数指针类型typedef
加载动态库LoadLibrary(LPCTSTR lpFileName)
获取函数地址FARPROC GetProAddress(HMODULE hModule,lpProcName)
//这里lpProcName必须与.dll文件头中的函数名字一致,声明导出的话会改变函数的名字,所以使用前最好用工具看一看.dll文件的头是否将函数换名,如果换名,此处也得是那个名字。如果是.def文件导出就不会换名。
通过函数指针使用函数。
卸载动态库
FreeLibrary(HMODULE hModule)
动态库程序也有main函数,是在load和free的时候调用的
>示例(使用class做库)
.h
#ifndef XXX.H
#define XXX.H

#ifdef EXPORT
#define DLL _declspec(dllexport)
#else
#define DLL _declspec(dllimport)
#endif
class DLL CMath
{
public:
int add(int ,int );
};

#endif
.cpp
#define EXPORT
#include ".h"
int CMath::add(int a, int b){}
0
0
查看评论

windows下 静态/动态库的一些总结

静态库: 静态库比较简单 制作静态库: 用C语言时只用一个.c文件就可以了(使用.c默认使用的是C语言的编译器),由于C编译器的缘故,不用提供头文件。使用库时只用#pragma comment(lib,"相对path") 就可以了使用了。 C++使用时也就是后缀名为.cpp时...
  • wh_2396
  • wh_2396
  • 2016-08-29 21:02
  • 288

关于windows 静态动态库 还有编译选项的一些问题

首先静态动态库这个就不需要讲很多了,静态库
  • chaney_f
  • chaney_f
  • 2014-08-01 14:02
  • 533

对Windows下动态库和静态库的总结

对Windows下的动态库编程并不很熟悉。下午利用一点时间写了个原型,过程中想到许多问题,网上搜到许多文章,学到不少知识,但感觉比较繁杂,于是决定理一理,就有了这篇博文。
  • nirendao
  • nirendao
  • 2016-01-24 00:29
  • 1470

window平台下动态库与静态库生成与使用(C++)

window平台下动态库与静态库生成与使用(C++)动态库动态库的生成vs的设置自行百度,废话不多讲,上代码:代码参考:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29121609&id=3851844//add.h...
  • G1036583997
  • G1036583997
  • 2017-04-24 11:20
  • 538

windows 下的静态、动态库

偶们在实际的编程开发中,经常会遇到运行时无法找到某个DLL文件或者链接时无法找到某个LIB文件。然后,我们就开始乱GOOGLE一下,然后将VS2005的设置改变一下,或许就Ok了,我们将别人开发的DLL或者LIB导入到我们的编程中,那么这些lib,DLL到底是什么呢?下面,偶就细细道来。 ...
  • caiyichaobupt
  • caiyichaobupt
  • 2010-04-05 01:36
  • 1779

Windows下使用静态库和动态库

Windows下使用静态库和动态库
  • zhangxiao93
  • zhangxiao93
  • 2016-05-10 23:26
  • 4516

Windows静态库和动态库的创建和使用 (lib vs dll)

偶们在实际的编程开发中,经常会遇到运行时无法找到某个DLL文件或者链接时无法找到某个LIB文件。然后,我们就开始乱GOOGLE一下,然后将VS2005的设置改变一下,或许就Ok了,我们将别人开发的DLL或者LIB导入到我们的编程中,那么这些lib,DLL到底是什么呢?下面,偶就细细道来。 &#...
  • u012655768
  • u012655768
  • 2014-01-12 21:32
  • 1143

Windows和Linux下动态库的创建和使用

摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。 但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作...
  • wubin1124
  • wubin1124
  • 2008-09-25 11:48
  • 5516

Windows下创建动态库

工具:vs2010 条件: (1)、需要一个DllMain函数做初始化的入口(创建win32控制台程序时,勾选DLL类型会自动生成这个文件) (2)、需要在导出函数的声明处加_declspec(dllexport)关键字 一、新建工程 若没有勾选DLL类型,则记得将工程属性...
  • WiseClown
  • WiseClown
  • 2015-08-21 08:47
  • 860

qt在Windows下调用动态库

原来调用动态库采用先定义函数 typedef int(*funCD109_Init)(int); 再加载库的方式 QLibrary mylib1("TSCLib.dll"); //判断是否正确加载 if(mylib1.load()) { ...
  • sdwfkfq
  • sdwfkfq
  • 2016-05-26 13:13
  • 958
    个人资料
    • 访问:25863次
    • 积分:373
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:14篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论