在TC中,怎样用命令编译lib库

在TC中,怎样用命令编译lib库,第1张

定义函数库的方法及应用:

一、2个相关的命令

1、TCC——TC的DOS下的命令行编译连接工具

2、TLIB——TC的DOS下的库 *** 作工具

二、1个自定义的函数库的例子

1、

在TC集成环境下,编一个文件USERADD.C

#define

_NO_MAIN

int

add(int

*a,int

*b)

{

int

c

c=(*a)+(*b)

return

c

}

按ALT—F9编译

生成一个

USERADD.OBJ文件。

2、按F10—F—O

退到DOSSHELL(DOS环境下)

COPY

USERADD.OBJ

..\LIB目录,在\LIB目录下执行

TLIB

USERLIB.LIB+USERADD.OBJ

就生成了一个自己的函数库

USERLIB,在这个函数库里就包含了函数模块

int

add(int

*a,int

*b)

的二进制代码。现在已经将自定义的函数放进了函数库,就可以把原文件USERADD.C删掉不要了。(当然,为了以后维护方便,还是作一个备份为好)。

以后如有其它的函数模块,也可以编译后用TLIB

命令加入到这个函数库里。

3、写一个包含文件

USER1.H,写完后COPY到INCLUDE

目录。内容如下:

int

add(int

*,int

*)

4、作好了以上的自定义函数库的准备工作,现在就可以使用了。

写一个程序,取名为ADD-1.C,在程序中调用库函数add(

)

#include

#include

void

main(

)

{

int

a,b,c

a=20b=30

c=add(&a,&b)

printf(“%d”,c)

}

5、在DOS命令行下,执行

TCC

ADD-1.C

..\LIB\USERLIB.LIB

就OK!

运行ADD-1.EXE,可以看到输出结果

50

Tc生成lib的方法:

扩展库与自建LIB库使用扩展库TC所带的库在有的情况下是无法满足功能要求的,自己写一个太麻烦,找到了一个LIB库又怕不会用。在WIN-TC中,对于使用外部的扩展库(第三方LIB)提供了一个方便的解决方法:首先要确定你的LIB库是FOR

TC版本的而不是FOR

VC或是其它的。如果确定是FOR

TC的版本的话就把你的首标文件(或称头文件),就是扩展名为*.h的文件拷贝到WIN-TC的include目录里,然后把相应名称的*.lib文件拷贝到lib目录,然后再运行WIN-TC时选择“编译配置”菜单项,你会看到扩展库信息栏目里有你的LIB库文件名在上面了,但是没有打钩。然后你把它钩选后再“确定”保存,以后的编译程序时就自动链接该扩展库了。自建立LIB库将自己的代码编译成LIB库的格式有利与保护自己的代码版权。如何来生成自己的LIB库呢?请按照下面的方法:

STEP

1——生成目标代码(OBJ)

建立mylib的代码文件/*********************

mylib.c

*********************/void

myfun(){printf("

myfun()

in

mylib.lib

")}然后保存为WIN-TC目录下的mylib.c文件然后到菜单项:运行->编译设置

看看“产生

OBJ

文件”是否已选择,若未选择则选择之。然后回到主界面,点“编译链接”按钮(F9

先点开始,点击运行,输入:CMD,进入DOS后,输入以下命令:\x0d\x0aecho [internetshortcut]>"C:\快捷方式lib.url"\x0d\x0aecho URL="E:\libs">>"C:\快捷方式lib.url"\x0d\x0aecho IconIndex=4>>"C:\快捷方式lib.url"\x0d\x0aecho IconFile=%SystemRoot%\system32\SHELL32.dll>>"C:\快捷方式lib.url"\x0d\x0a\x0d\x0a就会在C盘根目录上建立一个快捷方式lib(C:\lib)指向E盘下的一个文件夹libs

c++ 调用.lib的方法:

一: 隐式的加载时链接,有三种方法

1  LIB文件直接加入到工程文件列表中

在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在d出的文件对话框中选中要加入DLL的LIB文件。然后在首先要使用该函数的地方加上该LIB的头文件,如#include "..\lib.h"即可(没有头文件当然就不用了)。

2  设置工程的 Project Settings来加载DLL的LIB文件

打开工程的 Project Settings菜单,选中Link,然后在Object/library modules下的文本框中输入DLL的LIB文件,如you.lib(或者lib文件的路径,包括文件名)。然后在首先要使用该函数的地方加上该LIB的头文件,如#include "..\lib.h"即可(没有头文件当然就不用了)。

3  通过程序代码的方式

加入预编译指令#pragma comment (lib,"*.lib"),这种方法优点是可以利用条件预编译指令链接不同版本的LIB文件。因为,在Debug方式下,产生的LIB文件是Debug版本,如Regd.lib;在Release方式下,产生的LIB文件是Release版本,如Regr.lib。然后在首先要使用该函数的地方加上该LIB的头文件,如#include "..\lib.h"即可(没有头文件当然就不用了)。

当应用程序对DLL的LIB文件加载后,还需要把DLL对应的头文件(*.h)包含到其中,在这个头文件中给出了DLL中定义的函数原型,然后声明

二, 显式的运行时链接  ,(我用的是此方法) 隐式链接虽然实现较简单,但除了必须的*.dll文件外还需要DLL的*.h文件和*.lib文件,在那些只提供*.dll文件的场合就无法使用,而只能采用显式链接的方式。这种方式通过调用API函数来完成对DLL的加载与卸载,能更加有效地使用内存,在编写大型应用程序时往往采用此方式。这种方法编程具体实现步骤如下: ①使用Windows API函数Load Library或者MFC提供的AfxLoadLibrary将DLL模块映像到进程的内存空间,对DLL模块进行动态加载。 ②使用GetProcAddress函数得到要调用DLL中的函数的指针。 ③不用DLL时,用Free Library函数或者AfxFreeLibrary函数从进程的地址空间显式卸载DLL。 例:在应用程序中调用dll文件

——在应用程序中要首先装入dll后才能调用导出表中的函数,例如用mfc

创建基于对话框的工程test,并在对话框上放置"load"按钮,先添加装载代码。 1.首先在testdlg.cpp的首部添加变量设置代码:

//设置全局变量glibsample用于存储dll句柄

HINSTANCE  glibsample=null  //如果定义成HANDLE类型,则出错

//第二个变量showme是指向dll 库中showme()函数的指针

typedef int(* Showme)(void)

Showme showme

2.利用classwizard为"load"按钮添加装载dll的代码

void ctestdlg::onloadbutton()

{

//要添加的代码如下

if(glibsample!=NULL)

{

AfxMessageBox("the sample.dll has already been load.")

return

}

//装载sample.dll,未加路径,将在三个默认路径中寻找 (1)windows的系统目录:\windows\system

//(2)dos中path所指出的任何目录

//(3)程序所在的目录

glibsample=Loadlibrary("sample.dll")

//返回dll中showme()函数的地址

showme=(Showme)GetProcAddress(glibsample,"showme")


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/8004211.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存