如何把自己写的静态链接库(.lib)卖给别人?
2012-12-10 14:01
246 查看
动态链接库是Windows中很重要的一部分,现在不管动态链接库. 下面先搞清楚什么是静态链接库.
先看一个非常简单的程序:
开始学习C语言的时候,很纳闷,哪有pow啊?哪有printf啊?根本看不到这些库函数的具体实现,老师说,这些函数在系统库里面, 当时本人就这么记下了. 下面来看看究竟是怎么回事.
拿pow函数来说,微软给我们提供的只是一个math头文件和.lib文件. 具体实现由.lib文件(人看不懂的二进制比特流)封装起来了. 也就是说:微软在卖给我们pow函数的时候,只提供了头文件和.lib文件. 微软是很狡猾的,通过这种方式,我们就不知道pow函数的具体实现方式了,只能用它.
下面,本人来写一个自己的静态链接库,打算卖给别的程序员,便于他们进行新的开发, 本人也只提供头文件和.lib文件, 剩下的工作就是收钱了. 那么自己如何制作静态链接库卖给别人呢?
用VC6.0新建一个Win32 Static Library工程
![](http://img.my.csdn.net/uploads/201212/10/1355119135_7601.jpg)
新建myMax.h和myMax.cpp文件,添加到工程中. 其中的代码分别为:
![](http://img.my.csdn.net/uploads/201212/10/1355119141_7619.jpg)
编译链接后生成了:libTest.lib, 如下:
![](http://img.my.csdn.net/uploads/201212/10/1355119147_3292.jpg)
好了,本人的产品(myMax.h和libTest.lib)完成了,现在可以卖给其他程序员了. 其他程序员花了一些钱,买到了本人的产品(myMax.h和libTest.lib), 他可以利用这个产品进行新的开发:
新建一个工程,把买来的产品(myMax.h和libTest.lib)放在其中,并在newProduct.cpp中输入下面程序:
![](http://img.my.csdn.net/uploads/201212/10/1355119157_1599.jpg)
编译, 工程中自动增加了External Dependencies文件夹,myMax.h自动索引到了工程中,如下:
![](http://img.my.csdn.net/uploads/201212/10/1355119164_4470.jpg)
链接运行后,程序结果为:90
通过上面的一系列操作,别的程序员把从本人这里买到的libTest.lib(需要myMax.h配合)成功添加到了自己的新产品newProduct.exe中. 以上就是静态链接库的基本思路.
静态链接库有什么好处呢?速度快,且在发布产品.exe文件时,已经包含了.lib在其中,用.exe的用户不用担心缺少什么东西而运行不了(动态链接库则不然, .exe在这台电脑上可以运行,但如果其他电脑上缺少相应的.dll, 就不能在其他电脑上运行了, 就crash了).
Ok, 静态链接库到此为止,以后有空再卖卖更重要的动态链接库.
先看一个非常简单的程序:
#include<stdio.h> #include<math.h> int main() { int base = 2; int n = 5; int result = pow(base, n); printf("%d\n", result); return 0; }
开始学习C语言的时候,很纳闷,哪有pow啊?哪有printf啊?根本看不到这些库函数的具体实现,老师说,这些函数在系统库里面, 当时本人就这么记下了. 下面来看看究竟是怎么回事.
拿pow函数来说,微软给我们提供的只是一个math头文件和.lib文件. 具体实现由.lib文件(人看不懂的二进制比特流)封装起来了. 也就是说:微软在卖给我们pow函数的时候,只提供了头文件和.lib文件. 微软是很狡猾的,通过这种方式,我们就不知道pow函数的具体实现方式了,只能用它.
下面,本人来写一个自己的静态链接库,打算卖给别的程序员,便于他们进行新的开发, 本人也只提供头文件和.lib文件, 剩下的工作就是收钱了. 那么自己如何制作静态链接库卖给别人呢?
用VC6.0新建一个Win32 Static Library工程
![](http://img.my.csdn.net/uploads/201212/10/1355119135_7601.jpg)
新建myMax.h和myMax.cpp文件,添加到工程中. 其中的代码分别为:
// myMax.h #ifndef MY_MAX_HEADER #define MY_MAX_HEADER int myMax(int x, int y); #endif
// myMax.cpp #include "myMax.h" int myMax(int x, int y) { return x > y ? x : y; }
![](http://img.my.csdn.net/uploads/201212/10/1355119141_7619.jpg)
编译链接后生成了:libTest.lib, 如下:
![](http://img.my.csdn.net/uploads/201212/10/1355119147_3292.jpg)
好了,本人的产品(myMax.h和libTest.lib)完成了,现在可以卖给其他程序员了. 其他程序员花了一些钱,买到了本人的产品(myMax.h和libTest.lib), 他可以利用这个产品进行新的开发:
新建一个工程,把买来的产品(myMax.h和libTest.lib)放在其中,并在newProduct.cpp中输入下面程序:
![](http://img.my.csdn.net/uploads/201212/10/1355119157_1599.jpg)
#include <stdio.h> #include "myMax.h" #pragma comment(lib, "libTest.lib") // 可以在VC编译器中手动设置,但本人感觉用此处的代码比较好 int main() { int a = 80; int b = 90; printf("%d\n", myMax(a, b)); return 0; }
编译, 工程中自动增加了External Dependencies文件夹,myMax.h自动索引到了工程中,如下:
![](http://img.my.csdn.net/uploads/201212/10/1355119164_4470.jpg)
链接运行后,程序结果为:90
通过上面的一系列操作,别的程序员把从本人这里买到的libTest.lib(需要myMax.h配合)成功添加到了自己的新产品newProduct.exe中. 以上就是静态链接库的基本思路.
静态链接库有什么好处呢?速度快,且在发布产品.exe文件时,已经包含了.lib在其中,用.exe的用户不用担心缺少什么东西而运行不了(动态链接库则不然, .exe在这台电脑上可以运行,但如果其他电脑上缺少相应的.dll, 就不能在其他电脑上运行了, 就crash了).
Ok, 静态链接库到此为止,以后有空再卖卖更重要的动态链接库.
相关文章推荐
- 如何在linux下写静态链接库并卖给别人?
- 如何把自己写的动态链接库(.dll)卖给别人?
- 如何使自己的桌面应用程序在别人的电脑上也可以用
- [C++ rudiment]如何生成自己的静态库(lib)文件 (转)
- java 如何把别人的项目引入到自己的myeclipse 中
- 如何在编译器(vs2008)里设置调用别人写好的lib和dll
- 如何安装ionic,创建自己的项目,以及本地运行下载的别人的项目!
- 如何应对客户的各种无厘头问题--不要试图证明别人是错的,只需证明自己是对的
- vc++ 如何自己写c库函数lib
- 针对codeblocks:如何使用winmm.lib等等win32编程需要的静态链接库???
- 如何把github上别人分支合并到自己(分支)项目中
- 如何使自己的桌面应用程序在别人的电脑上也可以用
- 如何把别人的书变成自己的
- Caffe学习系列(23):如何将别人训练好的model用到自己的数据上
- 如何让思想(自己的,别人的)更有条理:与这个话题有关的几本书
- Visual C++ 2005如何引用静态链接库(.lib)
- 如何在编译器(vs2010)里设置调用别人写好的lib和dll
- 如何在编译器(vs2008)里设置调用别人写好的lib和dll
- 如何说服别人,如何让别人理解自己
- 如何使自己的桌面应用程序在别人的电脑上也可以用