vc2010创建lib和使用

本文详细介绍了如何在VC2010中创建静态库项目lib1,包括删除预编译头选项,添加源文件,以及实现数学函数。编译后在debug目录生成lib1.lib。使用lib1.lib时,只需包含lib1.h并使用#pragma comment(lib,"lib1.lib")。此外,文章还探讨了从DLL项目转换为LIB项目可能遇到的问题以及LIB和DLL之间的大小差异。" 125533962,10912945,R语言ggplot2详解:用colour参数创建分组散点图,"['R语言', '数据挖掘', '数据分析', '机器学习', '数据可视化']
新建一个静态库项目:
新建项目-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文件不含真正的可执行二进制,只有导出函数列表的信息


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值