Provided by: manpages-zh_1.5.2-1.1_all bug

NAME

       load - 装载机器代码并初始化新命令。

总览 SYNOPSIS

       load fileName
       load fileName packageName
       load fileName packageName interp
_________________________________________________________________

描述 DESCRIPTION

       这个命令把二进制代码从一个文件装载到应用的地址空间中并调用在包(package)中的初始化过程来把
       它加入到解释器中。fileName        是包含代码的文件的名字;它准确的形式在不同的系统上是不同
       的,但在多数系统上是一个共享库,例如,在  Solaris   下的  .so   文件或在  Windows 下的一个
       DLL。packageName   是包的名字,并被用于计算初始化过程的名字。interp   是要在其中装载包的解
       释器的路径名(详情参见  interp   手册条目);如果省略了 interp  ,它的缺省是在其中调用  load
       命令的那个解释器。

       一旦已经被装载到应用的地址空间中,两个初始化过程之一将在新代码中被调用。典型的,初始化进程
       将向一个    Tcl 解释器添加新命令。初始化过程的名字由    packageName   和目标解释器是否是安
       全解释器来确定。对于通常的解释器,初始化过程的名字的形式是   pkg_Init,这里   pkgpackageName         相同,但是第一个字母被转换成大写而所有其他字母被转换成小写。例如,如果
       packageNamefooFOo,则初始化过程的名字将是 Foo_Init。

       如果目标解释器是一个安全解释器,则初始化过程的名字将是       pkg_SafeInit           而不是
       pkg_Init。写 pkg_SafeInit   函数要仔细,在包中提供的功能中,只用由不可信任的代码使用是安全
       的的那部分初始化安全解释器。  关于 Safe-Tcl 的详细的信息,请参见 safe  手册条目。

       初始化过程必须匹配下列原型 (prototype):
              typedef int Tcl_PackageInitProc(Tcl_Interp *interp);
       interp 参数标识在其中装载包的解释器。初始化过程必须返回    TCL_OKTCL_ERROR  来指示是否
       成功完成;在有错误的情况下,应把解释器的结果设置为指向一个错误消息。初始化过程返回的结果就
       是  load  命令的结果。

       在一个应用中对每个 fileName 只进行一次文件的实际装载。如果一个给定的 fileName   被装载到多
       个解释器中,则第一个  load   将装载代码并调用初始化过程;随后的 load  将调用初始化过程而不
       再次装载代码  。不可能卸载或重载一个包。

       load   命令还支持同应用静态连接的包,条件是这些包已经通过调用 Tcl_StaticPackage   过程注册
       过了。如果 fileName  是一个空串,则必须指定packageName   。

       如果省略了  packageName  或被指定为一个空串,Tcl  尝试着猜出包的名字。在不同的平台上可能是
       不同的。在多数 UNIX  平台上,缺省的猜测是接受 fileName  的最后的组成部分,如果前三个字符是
       lib  就去掉它们,使用所有随后的  字母和下划线作为模块的名字。 例如,命令 load libxyz4.2.so │
       使用模块名 xyz  而命令 load bin/last.so {}   使用模块名 last。

       如果 fileName  是一个空串,则必须指定 packageNameload   命令首先用这个名字查找一个静态装 │
       载包(通过调用  Tcl_StaticPackage    过程注册的包);如果找到了就使用它。否则,load   命令用 │
       这个名字查找动态装载包,如果找到就使用它。如果一些不同的文件被装载成包的不同版本,Tcl   选 │
       择被最先装载的文件。

移植要点 PORTABILITY ISSUES

       Windows
              在装载出现  "library  not found" 错误的时候,也有可能是没找到一个依赖库。要查看依赖
              库,在一个 DOS  控制台中“dumpbin -imports  <dllname>”来查看必须导入那些库。在当前目
              录中装载一个 DLL  的时候,Windows 将忽略作为一个路径指定符(specifier)的“./”,转而使
              用一次启发式(heuristic)的查找来找到这个 DLL。要避免如此,装载DLL  就要用
                  load [file join [pwd] mylib.DLL]

BUGS

       如果以不同的fileNames 装载同一个文件,它将被多次载入这个进程的地址空间。在不同的系统上装载
       的行为是不同的(一些系统可以检测多余的装载,其他的可能不能)。

参见 SEE ALSO

       info sharedlibextension, Tcl_StaticPackage(3), safe(n)

关键字 KEYWORDS

       binary code, loading, safe interpreter, shared library

[中文版维护人]

       寒蝉退士

[中文版最新更新]

       2001/08/30

《中国 Linux 论坛 man 手册页翻译计划》:

       http://cmpp.linuxforum.net