创建和使用Windows静态链接库
首先明确这篇文章的目的,我希望大家能够通过这篇文章了解一下如何在实际工作中创建和使用Windows平台下的静态链接库。关于链接库的概念,希望大家参考维基百科”Library”词条(英文版),介绍的很全面,措辞也很严谨。远比你从网上东看西逛来的迅捷。文中对动态链接库和静态链接库的区别以及Windows平台和Linux平台的具体实现都做了很详细的说明。什么时候该用动态库,什么时候该用静态库也可以从中得到结论。所以我就不谈哪个好,哪个不好了。我只假设这样一种情况,你已经确定要创建、使用Windows的静态链接库,但却不知道如何操作,本篇文章的用意仅在于此。
另外顺便说一下,如果你想了解Windows下的动态链接库的创建和使用,你可以参考孙鑫老师的《VC++深入详解(修订版)》中的相关章节,里面介绍的也很系统,而且涉及一些原理介绍。如果你想了解Linux下静态链接库、动态链接库的创建和使用你可以在阅读刚才提到的维基百科”Library”词条(英文版)的基础上阅读我的后续博客内容。
这里说明一下,我所使用的系统为Windows 8.1 x64,所使用的编译器为VS 2012。其它类似环境的操作不难从本文推出。但有一点我想说明,既然你选择Windows下的静态链接库,那么我推荐你使用微软体系的编译器,无论是VC6.0还是后来的VS,都没有关系。但最好不要使用其它编译器。我不是说它们不如微软体系的编译器好,而是因为库文件这个东西很依赖于系统实现,Windows就是微软开发的,许多该平台上库的实现都是以微软为标准,所以其兼容性最好。当然如果你要使用linux下的动态、静态链接库,我就会推荐你使用gcc编译器,其对linux平台的兼容性最好。
下面开始正文,首先在VS中新建一个名称为libjiangxin的static library工程,并新建libjiangxin.h和libjiangxin.cpp两个文件,源代码如下:
- //文件:libjiangxin.h
- #ifndef LIB_H
- #define LIB_H
- extern "C" int add(int x,int y); //声明为C编译、连接方式的外部函数
- #endif
- //文件:libjiangxin.cpp
- #include "libjiangxin.h"
- int add(int x,int y)
- {
- return x + y;
- }
注意如果你使用VS2012的话,你还可以直接将libjiangxin.h中的代码改为:
- #pragma once
- extern "C" int add(int a,int b);
编译这个工程就得到了一个.lib文件,具体生成位置随编译器版本不同而不同,你可以在你的工程目录下仔细找找,这个文件就是一个函数库,它提供了add的功能。将头文件和.lib文件提交给用户后,用户就可以直接使用其中的add函数了。下面来看看怎么使用这个库,在libjiangxin工程所在的工作区(解决方案)内新建一个libTest工程。libTest工程仅包含一个test.cpp文件,它演示了静态链接库的调用方法,其源代码如下:
- #include <stdio.h>
- //Libjiangxin.h文件的所在位置,可能与我的不同
- #include "..\\Libjiangxin\\Libjiangxin.h"
- //指出本文件生成的.obj文件应与libjiangxin.lib一起连接,具体位置可能与我的不同
- #pragma comment(lib, "..\\Debug\\libjiangxin\\libjiangxin.lib")
- int main()
- {
- printf( "2 + 3 = %d", add( 2, 3 ) );
- return 0;
- }
创建和使用Windows静态链接库的更多相关文章
- VC++:创建,调用Win32静态链接库
概述 DLL(Dynamic Linkable Library)动态链接库,Dll可以看作一种仓库,仓库中包含了可以直接使用的变量,函数或类. 仓库的发展史经历了"无库" ---& ...
- Windows 下动态链接库和静态链接库
1.静态链接库:就是在编译的时候把库中代码复制进工程中,导致工程变大,但是速度快. 缺点在于一套代码可能在内存中有多份拷贝,占用内存. 2.动态链接库:库由windos api加载库代码,内存中只有一 ...
- 利用CMake自己创建OpenCV静态链接库
1.准备工作: 1)完成Visual Studio2012安装: 2)下载并解压CMake3.5.0: 3)下载并解压OpenCV2.4.12: 4)下载并解压TBB44_20160128oss. 2 ...
- Qt 共享库(动态链接库)和静态链接库的创建及调用
前言: 编译器 Qt Creator, 系统环境 win7 64 位 1.创建共享库: 新建文件或项目->选择 Library 和 c++ 库->选择共享库->下一步(工程名为 sh ...
- Qt之创建并使用静态链接库
1.创建静态链接库 静态库的工程名字 添加包含的模型 更改一下类的名字 我的静态编译库的工程. 写一个简单的静态哭的代码为后面测试静态库使用 cpp代码: #include "staticb ...
- Linux环境下c语言静态链接库和动态链接库创建和使用
库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 面对比一下两者: 静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功, ...
- VS2010创建C++静态链接库创建和使用
VS2010创建C++静态链接库的方法: 1. 创建一个新项目,在已安装的模板中选择“常规”,在右边的类型下选择“空项目”,在名称和解决方案名称中输入 staLIB.点击确定. 2.在解决方案资源管理 ...
- go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2]
go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2].想要产生dll,可以这样 workaround ,参考 golang [issuse#11058][ ...
- C/C++ 静态链接库(.a) 与 动态链接库(.so)
平时我们写程序都必须 include 很多头文件,因为可以避免重复造轮子,软件大厦可不是单靠一个人就能完成的.但是你是否知道引用的那些头文件中的函数是怎么被执行的呢?这就要牵扯到链接库了! 库有两种, ...
随机推荐
- web错误
“/Web”应用程序中的服务器错误. 服务器 'LD-PC' 上的 MSDTC 不可用. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误 ...
- c++学习总结--复合类型,const。
复习c++,有必要对一些东西做一下笔记,方便以后学习,如有问题,欢迎提出. 首先,最常用两种复合类型应该是引用和指针. 所谓复合类型,是在基本类型基础(如:int)上定义的类型. 引用是c++的一个复 ...
- C#闪屏
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- 编写一个类A,该类创建的对象可以调用方法f输出小写的英文字母表。然 后再编写一个A类的子类B,要求子类B必须继承类A的方法f(不允许重写), 子类B创建的对象不仅可以调用方法f输出小写的英文字母表,而且可以调用子 类新增的方法g输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。
package zimu; public class A { public void f() { for (int i = 97; i <123; i++) { System.out.print ...
- ios runtime的相关知识
一.iOS runtime原理 对于runtime机制,在网上找到的资料大概就是怎么去用这些东西,以及查看runtime.h头文件中的实现,当然这确实是一种很好的学习方法,但是,其实我们还是不会知道r ...
- img 图片高度设置为百分比无效的解答
当用百分比作为宽高时 因为百分比是相对于其最近的父元素的宽高,所以首先其父元素要有宽高,宽度一般不设置会有默认值(比如整个屏幕的宽度),但是高度不设置就没有默认值,因此如果父元素没设高度值,而其内部 ...
- 关于mysqli_fetch_assoc的一点说明
关于mysqli_fetch_assoc的一点说明 如下2种用法是错误的: 错误1 .... $fetchResult = mysqli_fetch_assoc($queryResult); ...
- 让PHP 5.3支持MSSQL连接
最近在Windows Server 2008配置了PHP环境,想要连接SQL Server 2008,但是悲催的发现,从5.3开始,PHP自带的dll不再支持2000以后的MS SQL Server了 ...
- 数据词典与ABAP类型映射
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- [C和指针]第二部分
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...