VC 静态库与动态库(二)静态库创建与使用

1.新建项目,创建项目和解决方案

StaticLibrary  这是静态库项目

G:\C++Learn\Library  Library文件夹用于存放库相关文件,包含静态库与后面的动态库工程和解决方案

StaticLibraryDemo  静态库解决方案名称

2.点击下一步,出现如下界面

选择静态库,选择预编译头,如果需要使用MFC就勾选上,最后点击完成

3.然后VS左边解决方案管理器会显示相关文件

这就是个最简单的静态库,编译生成下

4.文件夹生成了相关文件

解决方案目录:

解决方案目录下,项目文件夹StaticLibrary,Debug解决方案调试目录下面就存放了编译生成的.lib静态库

5. 给静态库项目添加一个c++类CMyMath供外部程序使用

然后分别添加二个函数,一个成员函数MathAdd 用于加法计算,一个全局函数MathSub 用于减法计算,最后编译生成

6. 给解决方案添加一个新的控制台项目用于测试静态库,创建完成后设置为启动项目

7. Test.CPP中添加相关代码

 1 // Test.cpp : 定义控制台应用程序的入口点。
 2 //
 3
 4 #include "stdafx.h"
 5 #include "../StaticLibrary/MyMath.h"  //静态库CMyMath头文件
 6
 7 #pragma comment(lib,"../Debug/StaticLibrary.lib") //引入静态库.lib文件
 8 int _tmain(int argc, _TCHAR* argv[])
 9 {
10     //使用静态库中CMyMath类,调用其中的MathAdd方法
11     CMyMath myMath;
12     int nResult = myMath.MathAdd(1,2);
13     printf("1 + 2 = %d\r\n",nResult);
14     //调用静态库中的全局函数MathSub
15     nResult = MathSub(5,1);
16     printf("5 - 1 = %d\r\n",nResult);
17     getchar();
18     return 0;
19 }

8. 编译运行Test, 查看相关信息.

控制台输出调试信息,下方的模快里只有Test.exe以及系统dll,静态库中所有代码都被打包加到Test.exe中去了,

与动态库相比静态库最明显区别就是不需要加载dll

总结:

注意:当静态库代码进行修改后,Test项目也需要重新编译生成

小技巧:当需要使用多个库的时候,可以在解决方案目录下新建个library文件夹用于存放多个库的文件,整个项目组织结构更加清晰,方便引入库

原文地址:https://www.cnblogs.com/fzxiaoyi/p/12052921.html

时间: 2024-10-28 15:37:46

VC 静态库与动态库(二)静态库创建与使用的相关文章

静态编译、动态编译、静态链接库和动态链接库理解

1.静态编译:编译器在编译可执行文件时,把需要用到的对应动态链接库(.so或.ilb)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行时不需要依赖于动态链接库. 2.动态编译: 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令.所以其优点一 方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源.缺点一是哪怕是很简单的程序,只用到了链接 库中的一两条命令,也需要附带一个相对庞大的链接库:二是如果其他计算机上没有安装对应的运行库,

【动态语言和静态语言】动态语言和静态语言的认识,定义

源:http://www.cnblogs.com/spmxlBlog/archive/2010/06/28/1766832.html 定义: 强类型语言(静态类型语言)是指需要进行变量/对象类型声明的语言,一般情况下需要编译执行. 例如C/C++/Java/C# 弱类型语言(动态类型语言)是指不需要进行变量/对象类型声明的语言,一般情况下不需要编译(但也有编译型的). 例如PHP/ASP/Ruby/Python/Perl/ABAP/SQL/JavaScript/Unix Shell等等.

JAVASE(八) 数组: 一维数组、二维数组、动态数组、静态数组

1.一维数组 1.1 数组的声明和初始化声明方式: String str[]; //不建议使用 String[] str2; 静态初始化:初始化和赋值同时进行 String[] str = new String[]{“aa”,”bb”} String[] str2 = {“aa”,”bb”} //声明和初始化不可以分开 动态初始化:初始化和赋值分开进行 String[] str = new String[5];//5代表是数组的长度 说明: 无论是静态初始化还是动态初始化,数组一旦创建成功,数组

静态链接与动态链接的区别(转载)

1.转载:http://www.cnblogs.com/kex1n/archive/2011/09/06/2168435.html 动态链接库.静态库.import库区别 动态链接库(Dynamic Linked Library):Windows为应用程序提供了丰富的函数调用,这些函数调用都包含在动态链接库中.其中有3个最重要的DLL,Kernel32.dll,它包含用于管理内存.进程和线程的各个函数: User32.dll,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数:GD

程序的静态链接,动态链接和装载

一.程序编译链接的整体流程 通常我们使用gcc来生成可执行程序,命令为:gcc hello.c,默认生成可执行文件a.out 其实编译(包括链接)的命令:gcc hello.c 可分解为如下4个大的步骤: 预处理(Preprocessing) 编译(Compilation) 汇编(Assembly) 链接(Linking) gcc compilation 1.       预处理(Preproceessing) 预处理的过程主要处理包括以下过程: 将所有的#define删除,并且展开所有的宏定义

C的日记-静态链接和动态链接

[静态链接和动态链接]    静态链接:源程序编译之后,如果想要执行,先对目标文件进行链接,链接完成后如果执行了,就把链接好的都装载进内存    缺点:        <1>如果一个目标文件被重复使用,每次都会把目标文件载入内存,造成浪费:        <2>如果相对某个目标文件进行更新,需要先把这个目标文件重新编译+链接,然后重新载入内存.    动态链接:在程序开始运行后(装载到内存)才开始把目标文件依次加载到内存然后编译成可执行文件    优点:        <1&

java静态代理和动态代理(一)

代理Proxy: Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题. 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别.通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从

深入浅出java静态代理和动态代理

首先介绍一下,什么是代理: 代理模式,是常用的设计模式.特征是,代理类与委托类有相同的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类.以及事后处理消息. 代理类和委托类,存在着关联关系.代理类的对象本身并不真正实现服务,知识通过调用委托类的对象的相关方法. 代理类可以分为两种:静态代理和动态代理. 静态代理: 代理类是由程序员创建,或由工具生成的代码 编译成的.在程序运行前,代理类的 *.class文件已经存在了.直接就可以运行 . 动态代理: 动态代理的代理类.没有直接由

java静态代理与动态代理简单分析

原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5860749.html 1.动态代理(Dynamic Proxy) 代理分为静态代理和动态代理,静态代理是在编译时就将接口.实现类.代理类一股脑儿全部手动完成,但如果我们需要很多的代理,每一个都这么手动的去创建实属浪费时间,而且会有大量的重复代码,此时我们就可以采用动态代理,动态代理可以在程序运行期间根据需要动态的创建代理类及其实例,来完成具体的功能. 其实方法直接调用就可以完成功能,为什么

什么是静态网页与动态网页

什么是静态网页与动态网页? 在服务器端运行的程序.网页.组件,属于动态网页,它们会随不同客户.不同时间,返回不同的网页 运行于客户端的程序.网页.插件.组件,属于静态网页 区分动态网页与静态网页的基本方法: ---->>>>第一看后缀名,第二看是否能与服务器发生交互行为. 静态页面特点: 静态网页是相对于动态网页而言,是指没有后台数据库.不含程序和不可交互的网页.你编的是什么它显示的就是什么.不会有任何改变. 静态网页相对更新起来比较麻烦,适用于一般更新较少的展示型网站 静态网页是