首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-27 
求C中自定义函数做成LIB后使用方法以下为网上查找到在C中把自定义函数加入库的方法:有时我们不希望用户看

求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



注:以上的一切函数,即变量均由写好了的程序分离出来,即保证了函数与两个全局变量的独立性和正确性,所以不会出函数或者全局变量与Main函数中定义的东西相冲突的情况!!


望高手赐教~~~     能给出在C中   把自定义函数   转换成LIB库的   通用方法更好,望顺带附上与头文件的结合用法~~!!!


在线等   ~~~3Q   ~~~~

[解决办法]
error LNK2001: unresolved external symbol _result

凡是这个link2001的问题,要自己先去看看是不是自己有定义或申明但是没有实现, 或者忘记加入外部的库文件了
这些库文件可能是 dll lib obj
设置好对应的目录和要加入的库文件即可

[解决办法]
mylib.h中,
#pragma comment(lib, "mylib.lib ") //#pragma预编译命令是将自己的函数库引入头文件
extern int Q;
extern char *p;
typedef struct propos
{
char x;
int r;
}Prop;
extern int result(Prop *pro,int n);
然后在集成环境里设置用到的库,好像是在option下面。。很久不用tc,记不太清了

[解决办法]
不同的编译器方法不一样,但是tc的lib恐怕没什么用?还不如用vc的命令行工具。
另外楼上的好像没看清楼主的问题……
[解决办法]
#pragma comment(lib, "你的lib ")
extern 函数声明;
[解决办法]
刚才找了一个Tc试了一下,似乎是不支持管理多个文件编译的工程。
要实现多个文件编译,就必须用命令行。
tcc yourfile.c yourlib.lib
这样就行了

另外,刚才安装BC试了一下,在BC3.1下面,已经可以支持工程文件,你可以在工程中加入mylib.lib,这样就可以在集成环境中编译,而不会提示找不到符号。

热点排行