求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
以下为网上查找到在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