静态链接库

   在windows的发展过程中在经历了“无库-静态链接库-动态链接库”的时代。

静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。

新建一个 static library 工程 ,并新建 lib.h和 lib.cpp 两个文件,lib.h 和 lib.cpp的源代码如下:

1  #include <stdio.h>
2  #include "..\lib.h"
3  #pragma comment( lib, "..\\debug\\libTest.lib" )    //指定与静态库一起连接
4  int main(int argc, char* argv[])
5  {
6    printf( "2 + 3 = %d", add( 2, 3 ) );
7  }

编译这个工程就得到了一个.lib 文件,这个文件就是一个函数库,它提供了 add 的功能。将头文件和.lib 文件提交给用户后,用户就可以直接使用其中的 add 函数了。

时间: 2024-12-10 16:23:35

静态链接库的相关文章

&nbsp; &nbsp; &nbsp; &nbsp; 自己制作静态链接库并使用

目的隐藏源代码只提供给.a 与.h文件 /*aston.c */#include <stdio.h>void func1( void ){ printf("func1 in aston.c\n");}int  func2(int a,int b){ printf("func2 in aston.c\n"); return a+b;}//aston.hvoid func1( void ); int  func2(int a,int b); //Makefi

[C] linux静态链接库与动态链接库详解

http://blog.chinaunix.net/u2/76292/showart.php?id=1274181 一顺便说说了哦  通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file).程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下.所以这些函数库被成为静态库(static libaray),通常文件名为"libxx

Windows 下动态链接库和静态链接库

1.静态链接库:就是在编译的时候把库中代码复制进工程中,导致工程变大,但是速度快. 缺点在于一套代码可能在内存中有多份拷贝,占用内存. 2.动态链接库:库由windos api加载库代码,内存中只有一份拷贝.工程中只保留链接到这份代码的引用,有两种动态链接库, (a)load time dynamic linking:工程运行的时候自动加载,结束时自动卸载 (b) run time dynamic linking: 在工程运行过程中通过调用LoadLibrary()和GetProcAddress

Linux下 静态链接库 和 动态链接库

先来说说C/C++编译过程 编译: 检查语句符号定义,将C/C++代码翻译生成中间语言. 链接: 将中间代码整合,生成可执行的二进制代码. 简单的说,库文件都是一种特殊的中间语言文件,静态库还是一种特殊格式的归档文件(打包的文件). 使用静态库: 1. 先编写库函数 1 #ifndef _PRINT_TEST_H_ 2 3 #define _PRINT_TEST_H_ 4 #ifdef __cplusplus 5 extern "C" 6 { 7 #endif 8 9 extern i

动态链接库和静态链接库

#1,静态链接库 lib指令在exe中: 不能再包含其他动态库或静态库: #2,动态链接库 该dll不必在最终exe文件中: exe可"动态"引用或卸载这个dll: 可以包含其他的动态库或者静态库: #3,动态库的其他概念 dll的编程机制与具体的编程语言和编译器无关: 动态链接库随处可见 Kernel32.dll:主要处理内存管理和进程调度: user32.dll:主要控制用户界面: gdi32.dll:负责图形方面的操作: VC动态链接库分类 Non-MFC dll:不采用MFC类

利用GCC编译器生成动态链接库和静态链接库

转载请标明:http://www.cnblogs.com/winifred-tang94/ 1.编译过程 gcc –fPIC –c xxx.c 其中-fPIC是通知gcc编译器产生位置独立的目标代码.链接的时候不通过拷贝来进行. 2.链接过程 gcc –shared –o libxxx.so xxx.o 经过编译链接就可以生成动态链接库,其扩展名为.so Eg. 还可以gcc –fPIC –shared -o libhello.so hello.c 举个例子: //Hello.h //hello

利用CMake自己创建OpenCV静态链接库(VS2012+OpenCV2.4.12+TBB)

1.准备工作: 1)完成Visual Studio2012安装: 2)下载并解压CMake3.5.0: 3)下载并解压OpenCV2.4.12: 4)下载并解压TBB44_20160128oss. 2.创建OpenCV静态链接库编译项目的目标目录. 3.由CMake生成OpenCV静态链接库编译项目: 1)双击cmake-gui.exe,删除配置缓存,选择编译平台,如下图所示: 2)选择OpenCV2.4.12源码所在目录(CMakeLists.txt所在目录)以及第2步创建的静态库项目目标目录

VS2010中如何将动态链接库改成静态链接库

VS2010中如何将动态链接库改成静态链接库 VS2010静态编译生成的.exe可执行文件,可以免安装免DLL在其他电脑直接运行. 静态编译:就是在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖动态链接库. 1. 编译实现方式有两种 [1]debug方式的静态链接: 设置: (1)项目 -> 配置属性->常规->MFC的使用:在静态库中使用MFC(如果有使用MFC). (2)项目 -> 配置

linux下的动态链接库和静态链接库到底是个什么鬼?(二)动态链接库的编译与使用

上一篇文章里讲解了linux下静态链接库的编译与使用,下面我们来聊聊动态链接库的编译与使用方法. 所谓动态链接库,也就是说编译的时候不会真的把你引用到的库给编到你的执行程序里,而是在执行时候才会去加载相关的库,所有用到此库的程序可以共享一份代码,这样带来的好处是可执行程序所占的空间变小了,同时,如果库需要升级,你并不需要重新编译你的程序,只要把相关的库升级即可. 接下来我们来看看动态链接库的编译与使用方法,代码还是和上文中的一样,分别为?sum.c, sum.h, 和main.c, 在linux

静态链接库(lib)、动态链接库(dll)与动态链接库的导入库(lib)

静态链接库与动态链接库相对应.动态链接库的导入库不同于以上两种库. 1.静态链接库(lib) 程序编译一般需经编辑.编译.连接.加载和运行几个步骤.在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为"库"文件(lib), 这种LIB中有函数的实现代码.在静态编译时,它是将LIB中的代码加入目标模块(EXE或者DLL)文件中,所以链接好了之后,LIB文件就没有用了. 2.动态链接库(dll) 动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其