简单来说,就是建立两个项目:
① Win32 Project (Win32 项目):
接口文件.h 和 实现接口文件.cpp, 按F7编译后 生成静态库 *.lib ,lib可以理解成一个可以实现功能的包
②Win32 Console Application(Win32控制台工程) :
使用 *.lib 库以及接口文件.h,用一个main函数调用,就可以实现跟之前有实现接口文件.cpp一样的功能。
编写静态库有什么好处呢?简而言之,你的函数具体实现不会泄露,别人要用你的库所实现的功能,直接调用静态库跟接口名称就可以。
详细的解释如下:
好啦,接下来是详细的编写静态库、使用静态库教程!!!
一、编写静态库(*.lib)
在Vs2010下,新建一个生成静态库的工程,操作:File->New->Projects->Win32 Project,点击Next,在Win32 application wizard页面中选择静态库。
①
②
③
④工程名:Win32ProjectTest
工程目录:I:\VS2010\C++Project\Win32ProjectTest
这时你可以在工程目录下看到*.sln及*.sdf文件,没有任何源文件。
你可以像以前的练习那样(比如练习Polynomial)来写你的代码,为省事,可将练习Polynomial中写的PolynomialList类的3个文件(PolynomialList.cpp, PolynomialList.h,TestPolynomial.h)直接拷贝到该工程目录下(I:\VS2010\C++Project\Win32ProjectTest);
然后将这两个文件(PolynomialList.cpp, PolynomialList.h,TestPolynomial.h)加入到该工程,操作:Project->Add exiting item->Files,然后选择这3个文件即可:
可以看到,工程下已添加。(其实就是写 .h 和 .cpp 用来编译生成lib库的。)
注意:这里要在.cpp源文件中加入#include"stdafx.h",然后在stdafx.h文件中加入#include " PolynomialList.h"和#include"TestPolynomial.h",即把头文件 加进去
这时你就可以编译(F7)整个工程了,编译好后会看到\debug目录下有个*.lib文件,即为静态库文件。
Win32ProjectTest.lib库的目录:I:\VS2010\C++Project\Win32ProjectTest
注意:不像一般的C++工程,必须要有main()主函数入口。编译静态库不需要main()函数的。
二、使用静态库(*.lib)
有了静态库文件(比如名为Win32ProjectTest.lib),然后你只要PolynomialList.h,TestPolynomial.h和Win32ProjectTest.lib就可以使用PolynomialList的功能了。
这样你就可以通过头文件(PolynomialList.h,TestPolynomial.h(提供接口))及库文件(Win32ProjectTest.lib(提供实现接口的库))即可发布你的程序,不必发布你的程序的实现的源代码(*.cpp),这样可以达到保护你的源代码(和知识产权)的目的。
新建一个Console application的工程,操作:File->New->Projects->Win32 Console Application;
使用静态库.lib工程的目录:I:\VS2010\C++Project\Win32ConsoleAppLibUsing
把PolynomialList.h,TestPolynomial.h及刚才生成的库文件Win32ProjectTest.lib拷贝到该工程目录下:
再将你练习PolynomialList的测试文件test.cpp(其实可以自己写)拷贝到该工程目录下:
将PolynomialList.h,TestPolynomial.h和test.cpp文件加入到工程,Project->Add to project->Files;
接下来,引入 Win32ProjectTest.lib 库到工程中,
1.1链接器
现在将Win32ProjectTest.lib加入到工程来,project->Settings…->Linker->Input(输入),在Additional Dependencies下的编辑框最后填上”Win32ProjectTest.lib”.
1.2
接着,链接器–》常规–》附加库目录(即Win32ProjectTest.lib),填写I:\VS2010\C++Project\Win32ConsoleAppLibUsing
2.1 C/C++
然后,在C/C++ 下的 常规–》附加包含目录,填写Win32ProjectTest.lib库的目录,
现在试着编译看看。没问题了吧?运行程序,得到与当初练习PolynomialList完全一样的结果。
结果如下: