求C中自定义函数做成LIB后使用方法解决方法

求C中自定义函数做成LIB后使用方法


  以下为网上查找到在C中把自定义函数加入库的方法:


有时我们不希望用户看到自己的源程序文件。那么可以通过如下步骤建立:

1.首先建立包含要放到库中的函数的C源程序,同样,源程序中不要定义main函数,而只包含其它若干个函数的定义。例如:建立FUNC.C,内容如下:
max(int   x,int   y)
{
return(x> y?x:y);
}
……

2.编译源程序。注意,只进行编译,不要连接。(选择“Compile”菜单中的“Compile   to   OBJ”选项)若源程序有错误,经修改之后再编译,直到最后通过为止。这时系统就在指定的目录中建立了与源文件相对应的目标文件:FUNC.OBJ。   
3.建立自己的目标模块库。
退到DOSSHELL(DOS环境下,选择“File”菜单中的“OS   Shell”)在turboc2\目录下执行:  
TLIB   MYLIB.LIB   +FUNC.OBJ。就生成了一个自己的函数库MYLIB,在这个函数库里就包含了函数模块   max(int   x,int   y)、   min(int   x,int   y)的二进制代码。现在已经将自定义的函数放进了函数库,就可以把原文件FUNC.C删掉不要了。(当然,为了以后维护方便,还是作一个备份为好)。   拷贝这个库文件到C:\TC\LIB目录中。“+ "是把指定的文件加到指定的库中。还可以用“- "符号,从库中删除指定的模块。以后如用户又编写了新的函数,通过编译之后同样可利用上述方法将其加到用户目标模块库ABC.LIB之中,命令为:  
 TILB   MYLIB.LIB   +A.OBJ   +B.OBJ   +C.OBJ  



(2)建立头文件   ,在头文件中声明自己的函数。如新建一个文件myfunc.h如下:
#pragma   comment(lib, "mylib.lib ")
int   max(int   a,int   b);
int   min(int   a,int   b);

将头文件放入turboc2下的include文件夹。#pragma预编译命令是将自己的函数库引入头文件,必须要有。mylib的路径要正确。如mylib.lib不在当前目录和系统目录下,要使用完整路径,如: "c:\zhang\mylib.lib "

然后直接在源文件里使用#include   :
/*   比较大小。文件名   bijiao.c   */
#include   "myfunc.h "
void   main()
{
int   a,b;
printf( "\ninput   two   numbers: ");
scanf( "%d%d ",&a,&b);
printf( "\nThe   lagerer   number   is:%d ",max(a,b));
printf( "\nThe   smaller   number   is:%d ",min(a,b));
}


然后   下是我想将一个已写好的程序中的一个函数抽离出来,即想将自定义函数放入自定义库中的步骤

基本上模仿着上面来做的


1.先写Mylib.c:

int   Q;                            
char   *p;                        
                                        //因为result   中会用到这两个变量  

typedef   struct   propos
{
char   x;
int   r;
}Prop;


int   result(Prop   *pro,int   n)
{
....                         //此为函数实现(可以确定是正确的!)略..
}

2.然后在TC中把mylib.c转成mylib.lib       成功通过
放入Tc\LIB中

3.自己写头文件mylib.H   放入

#pragma   comment(lib, "mylib.lib ")         //#pragma预编译命令是将自己的函数库引入头文件
int   Q;
char   *p;
typedef   struct   propos
{
char   x;
int   r;
}Prop;
int   result(Prop   *pro,int   n);


4.重写   main函数     //lib.c

#include   <Mylib.h>
extern   int   Q;                                         //   不知还需不需要声明???
extern   char   *p;                                     //   The   Same
....
main()
{
...
尝试调用result函数
}

ctrl+f9后提示:

LIB.OBJ   :   error   LNK2001:   unresolved   external   symbol   _result
Debug/LIB.exe   :   fatal   error   LNK1120:   1   unresolved   externals