Window中创建和使用静态库与动态库

一、静态库的创建和使用

1. 静态库的创建

(1) 在VS2013中选择菜单->File->New->Project,选择Visual C++ ->Win32选项,然后点击Win32 Project图标,选择Win32 Application Wizard,选择Application type下的Static library选项。工程名字为TestStaticLib。

(2)在Solution Explorer的Header Files下新建一个test_header.h头文件

 1 #ifndef TEST_HEADER_H_
 2 #define TEST_HEADER_H_
 3
 4 #ifdef _WIN32
 5 #ifdef _LIB
 6 #define DECLSPEC __declspec(dllexport)
 7 #else
 8 #define DECLSPEC __declspec(dllimport)
 9 #endif
10 #else
11 #define DECLSPEC
12 #endif
13
14 #endif

__declspec修饰符仅在Windows平台下有效。
__declspec(dllexport)的作用是将当前函数或者类导出,以便可以从DLL中调用。

__declspec(dllimport)的作用是在应用程序中可以使用导出的DLL函数或者类。

在VS2013编译器中新建一个Static library工程的时候,预定义了_LIB宏,所以上面的代码中

#define DECLSPEC __declspec(dllexport)是有效的。

(3) 在Solution Explorer的Header Files下新建一个Source.h文件

 1 #ifndef SOURCE_H_
 2 #define SOURCE_H_
 3 #include "test_header.h"
 4
 5 DECLSPEC int MyFunction(int a,int b);
 6
 7 class DECLSPEC MyClass
 8 {
 9 public:
10     MyClass(int a, int b) : m_a(a), m_b(b){}
11     ~MyClass();
12     int add();
13 private:
14     int m_a;
15     int m_b;
16 };
17 #endif

(4) 在Solution Explorer的Source Files文件夹下新建一个Source.cpp文件

 1 #include "Source.h"
 2
 3 int  MyFunction(int a,int b)
 4 {
 5     return a + b;
 6 }
 7
 8 MyClass::~MyClass()
 9 {
10 }
11
12 int MyClass::add()
13 {
14     return m_a + m_b;
15 }

(5) 编译工程,在工程目录的Debug文件夹下会生成TetsStaticLib.lib静态库文件。
2. 静态库的使用

(1)新建一个Win32 Console工程,名字为TestLib。

设置TestLib的工程属性

①Configuration Properties->C/C++->General->Additional Include Directories

D:\Program\C++Pro\TestStaticLib\TestStaticLib

②Configuration Properties->Linker->General->Additional Library Directories

D:\Program\C++Pro\TestStaticLib\Debug

③Configuration Properties->Linker->Input->Additional Dependencies

TestStaticLib.lib

(2)添加如下测试代码

 1 #include "stdafx.h"
 2 #include "Source.h"
 3 #include <iostream>
 4 using namespace std;
 5
 6
 7 int _tmain(int argc, _TCHAR* argv[])
 8 {
 9     int c = MyFunction(1, 2);
10     cout << c << endl;
11
12     MyClass cla(2, 4);
13     cout << cla.add() << endl;
14     system("pause");
15     return 0;
16 }

(3) 编译运行生成的TestLib.exe,可以看到程序结果,这时将TestLib.exe拷贝到任意文件夹也可以运行。

时间: 2024-10-15 11:38:59

Window中创建和使用静态库与动态库的相关文章

iOS 中的静态库与动态库,区别、制作和使用

如果我们有些功能要给别人用,但是又不想公开代码实现,比如高德地图.第三方登录分享等等,这时候我们就要打包成库了.库分静态库和动态库两种: 静态库:以.a 和 .framework为文件后缀名.动态库:以.tbd(之前叫.dylib) 和 .framework 为文件后缀名. 静态库与动态库的区别 静态库:链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝.动态库:链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,多个程序共用(如系统的UIKit.framework等),节省内

(转)HelloWorld CMake CMake中构建静态库与动态库及其使用

继续完善Hello World,建立它的共享库, 包括静态库和动态库. 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc 向终端输出Hello World字符串. 2,安装头文件与共享库. 3, 编写一个程序使用创建的共享库(静态库和动态库). cd /home/ccj/CMakeDemo mkdir t3   cd /backup/cmake/t3 mkdir lib   在t3目录下建立CMakeLists.txt,内容如下: PRO

HelloWorld CMake Demo 03:CMake中构建静态库与动态库及其使用

? 继续完善Hello World,建立它的共享库, 包括静态库和动态库. ? 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc 向终端输出Hello World字符串. 2,安装头文件与共享库. 3, 编写一个程序使用创建的共享库(静态库和动态库). ? 一,准备工作: 在/home/ccj/CMakeDemo目录建立t3目录,用于存放本节涉及到的工程. cd /home/ccj/CMakeDemo mkdir t3 ? 二,建立共享库

VS中Debug和Realease、及静态库和动态库的区别整理(转)

原文出自:http://www.cnblogs.com/chensu/p/5632486.html 一.Debug和Realease区别产生的原因 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用. Debug 和 Release 的真正区别,在于一组编译选项. Debug 版本 参数 含义 /MDd /MLd 或 /MTd 使用 Debug ru

转载《Xcode 创建静态库和动态库》

Xcode 创建静态库和动态库 地址链接   http://www.cocoachina.com/ios/20150921/13385.html 1.linux中静态库和动态库区别: 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 静态库:这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去

Linux学习笔记7——linux中的静态库和动态库

一.静态库的编译 静态库的编译过程如下: 1.编译成目标文件 这里有一个可选项-static,调用格式:gcc -c -static 代码文件名.c 2.归档成静态库 A.归档的工具是ar工具,使用ar -r可以将文件归档成静态库,调用格式:ar -r 静态库文件 被归档的文件 例如:我们这有两个C文件,分别为test1.c和test2.c 首先我们将它编译成目标文件:gcc -c -static test1.c gcc -c -static test2.c 此时会产生两个文件,分别为test1

Windows静态库和动态库的创建和使用(VS2005)

偶们在实际的编程开发中,经常会遇到运行时无法找到某个DLL文件或者链接时无法找到某个LIB文件.然后,我们就开始乱GOOGLE一下,然后将VS2005的设置改变一下,或许就Ok了,我们将别人开发的DLL或者LIB导入到我们的编程中,那么这些lib,DLL到底是什么呢?下面,偶就细细道来. 首先,偶们说第一个:静态链接库(Static Libary) 偶们用VS2005做一个静态链接库先 打开VS2005,新建à项目(staticCai)àWin32控制台应用程序 新建static_lib.h 和

C语言中静态库和动态库笔记

库 库,故名思议,是存放东西的地方,其中存放的东西可以被多个人公用. 程序中借用库的概念,描述将代码进行抽取,这种代码被大多数程序使用, 其过程具有一定的模块化.封装.抽象的特征. 按照库的使用方式, 静态库 和 动态库. 不管怎样方式使用, 首先库的概念体现出代码逻辑上公共抽象. 有篇博文,做了介绍, 并有例子, 本文纯粹学习,借鉴了其中的例子. http://www.cnblogs.com/chio/archive/2007/11/03/948480.html 静态库 静态库,编译应用程序的

C语言函数篇(五)静态库和动态库的创建和使用

使用库函数是源码的一种保护?我猜的. 库函数其实不是新鲜的东西,我们一直都在用,比如C库. 我们执行pringf() 这个函数的时候,就是调用C库的函数. 下面记录静态库和动态库的生成和使用. 静态库:libxxx.a 动态库:libxxx.so 静态库: 在程序编译的时候,将库编译进可执行程序中, 运行的时候不需要外部函数库 动态库: 在程序运行的时候,将库加载到程序中,运行的时候需要外部函数库 函数库的目录有 /lib 和 /usr/lib 和 自定义 头文件是库文件的辅助,头文件就像是目录