在windows平台下编写程序时,常常会希望别人能够使用自己的代码,但是又不希望别人看见你的代码,那么有没有什么方法可以解决这个问题呢?
当然有,在windows平台下,通过将源文件打包成为静态库或者动态库,就可以完美的解决这个问题。本文通过例子的形式讲解静态库的生成过程。
windows下的静态库的后缀名为lib。我们通过将源文件打包成为lib文件,然后同时给别的开发者提供一个说明接口的头文件,这样别人就可以使用你的静态库了。
首先,我们新建4个文件,作用如下
a.c:主函数所在的文件
b.c功能函数实现的文件 被a.c中的主函数调用
b.h功能函数实现文件的头文件
makefile:makefile 源文件
所有文件的具体内容如下:
a.c
#include"stdio.h"
#include"b.h"
void main(void)
{
int i;
i = multiple(3,4);
printf("hello makefile\n");
printf("i = %d\n",i);
}
b.c
#include"b.h"
int multiple(int a, int b)
{
return a * b;
}
b.h
#ifndef B_H
#define B_H
int multiple(int a, int b);
#endif
makefile
TOOLDIR = D:\MyDownloads\Download\VC6.0green\VC98
DIR = $(TOOLDIR)\Include
LIB_DIR = $(TOOLDIR)\Lib
INCDIR = -I b.h -I $(DIR)
LIB = $(LIB_DIR)/LIBC.LIB $(LIB_DIR)/OLDNAMES.LIB \
$(LIB_DIR)/KERNEL32.LIB
Test:a.obj b.lib
-Link a.obj b.lib $(LIB)
a.obj:a.c
-cl a.c $(INCDIR) $(LIB)
b.lib:b.obj
-lib b.obj
b.obj:b.c
-cl b.c $(INCDIR) $(LIB)
.PHONY:clean
clean:
@echo clean the following files:
-rm *.exe
-rm *.obj
-rm *.lib
@echo Done!
makefile的作用就是现将a.c编译成为a.obj。然后将b.c编译成为b.lib,最后将这两个链接成为目标文件
在运行makefile后会生成一个b.lib文件,这样以来,你就可以将你工程目录中的b.c去掉了,在需要时,你将b.c和b.lib给别人就行了。