vc2010创建lib和使用
来源:互联网 发布:js删除对象元素 编辑:程序博客网 时间:2024/05/20 12:21
新建一个静态库项目:
新建项目-win32,名字叫lib1,之后选择静态库,同时把预编译头的勾选去掉,其他都默认
默认什么文件都没生成,添加lib1.h和lib1.cpp(把上篇dll的两个文件的内容拷贝过来就行)
编译之后,在debug文件夹生成lib1.lib
使用方法,同使用dll。不同的是不用拷贝dll了(没有dll可拷),其他和dll的使用方式都一样,比如都要#pragma comment(lib,"xxx.lib")
值得一体的是,调用程序不需要设置为静态链接方式。
在使用的地方添加:
#include "lib1.h"
#pragma comment(lib,"lib1.lib")
调用函数:
int sum = MathFuncs::MyMathFuncs::Add(1, 2);
TRACE("sum = %d\n",sum);
附1:使用vc2010自带的dumpbin查看lib的导出函数
dumpbin /LINKERMEMBER Test.lib > 1.txt
附2:
发现如果之前是一个dll的项目,如果按照如下方式变更为lib
项目 -> 配置属性->常规->配置类型 :静态库
然后生成一个lib文件,使用这个lib的时候,貌似不好用
而原来是一个lib库的项目,通过更改 项目 -> 配置属性->常规->配置类型 :动态库 的方式生成的lib和dll,则是可以使用
同时也可以发现,对于同一个项目,lib库项目生成的lib文件很大,改为dll库项目后生成的同名lib文件很小.
这也说明这个小lib文件不含真正的可执行二进制,只有导出函数列表的信息
新建项目-win32,名字叫lib1,之后选择静态库,同时把预编译头的勾选去掉,其他都默认
默认什么文件都没生成,添加lib1.h和lib1.cpp(把上篇dll的两个文件的内容拷贝过来就行)
// dll1.cpp : 定义 DLL 应用程序的导出函数。//// testdll.cpp : 定义 DLL 应用程序的导出函数。#include "lib1.h" #include <stdexcept> using namespace std; namespace MathFuncs { double MyMathFuncs::Add(double a, double b) { return a + b; } double MyMathFuncs::Subtract(double a, double b) { return a - b; } double MyMathFuncs::Multiply(double a, double b) { return a * b; } double MyMathFuncs::Divide(double a, double b) { if (b == 0) { throw invalid_argument("b cannot be zero!"); } return a / b; } }
//testdll.h#define TESTDLL_EXPORTS#ifdef TESTDLL_EXPORTS #define TESTDLL_API __declspec(dllexport) #else #define TESTDLL_API __declspec(dllimport) #endif namespace MathFuncs { // This class is exported from the testdll.dll class MyMathFuncs { public: // Returns a + b static TESTDLL_API double Add(double a, double b);// Returns a - b static TESTDLL_API double Subtract(double a, double b);// Returns a * b static TESTDLL_API double Multiply(double a, double b);// Returns a / b // Throws const std::invalid_argument& if b is 0 static TESTDLL_API double Divide(double a, double b);}; }
编译之后,在debug文件夹生成lib1.lib
使用方法,同使用dll。不同的是不用拷贝dll了(没有dll可拷),其他和dll的使用方式都一样,比如都要#pragma comment(lib,"xxx.lib")
值得一体的是,调用程序不需要设置为静态链接方式。
在使用的地方添加:
#include "lib1.h"
#pragma comment(lib,"lib1.lib")
调用函数:
int sum = MathFuncs::MyMathFuncs::Add(1, 2);
TRACE("sum = %d\n",sum);
附1:使用vc2010自带的dumpbin查看lib的导出函数
dumpbin /LINKERMEMBER Test.lib > 1.txt
附2:
发现如果之前是一个dll的项目,如果按照如下方式变更为lib
项目 -> 配置属性->常规->配置类型 :静态库
然后生成一个lib文件,使用这个lib的时候,貌似不好用
而原来是一个lib库的项目,通过更改 项目 -> 配置属性->常规->配置类型 :动态库 的方式生成的lib和dll,则是可以使用
同时也可以发现,对于同一个项目,lib库项目生成的lib文件很大,改为dll库项目后生成的同名lib文件很小.
这也说明这个小lib文件不含真正的可执行二进制,只有导出函数列表的信息
阅读全文
0 0
- vc2010创建lib和使用
- vc2010创建dll和使用
- 创建和使用lib工程
- Lib和Dll工程创建和使用
- 创建和使用lib静态库
- VS如何创建和使用lib文件
- [DLL]创建和使用静态库Lib
- VS如何创建和使用lib文件
- VS如何创建和使用lib文件
- 创建和使用静态库(.lib)
- VS如何创建和使用lib文件
- 在Visual Studio中使用C++创建和使用LIB
- 在Visual Studio中使用C++创建和使用LIB
- vs2010创建和使用动态链接库DLL和lib
- 创建和使用多层嵌套的lib库的总结
- 如何用vc6创建和使用静态库(lib)
- 如何用vc6创建和使用静态库(lib)
- VS dll和lib的创建及使用
- 程序员应该访问的最佳网站中文版
- 手把手教你实现线性回归模型
- 虚函数解释说明
- 红黑树下
- HDU 4786 Fibonacci Tree(最小生成树变式)
- vc2010创建lib和使用
- 100个GDB小技巧(一)
- vue依赖webpack的环境配置(一)
- 简单对比几个技术博客类网站
- SpringBoot入门(五)数据库操作入门
- C程序的存储区及堆与栈区别
- 计算机网络(2):其他补充
- Java重要的基础语法(一)
- 使用阿里云智能翻译接口案例——CSDN博客