Provided by:
manpages-zh_1.5.1-1_all 
NAME
load - 裝載機器代碼並初始化新命令。
` SYNOPSIS
load fileName
load fileName packageName
load fileName packageName interp
_________________________________________________________________
yz DESCRIPTION
這茤R令把二進制代碼從一-
蚗仵袑佶到應用的地址空間中並調用在包(package)中的初始化過程來把它加入到解釋器中。fileName
是包含代碼的檔案的名字;它準確的形式在不同的系統上是不同的,但在多數系統上是一-
茼@享庫,例如,在 Solaris 下的 .so 檔案或在 Windows 下的一
DLL。packageName 是包的名字,並被用於p算初始化過程的名字。interp
是n在其中裝載包的解釋器的路徑名(詳情參見 interp 手冊條目);如果省略了
interp ,它的預設是在其中調用 load 命令的那虒挭擰飽C
一旦已經被裝載到應用的地址空間中,兩-
茠鴝l化過程之一將在新代碼中被調用。典型的,初始化進程將向一 Tcl
解釋器添加新命令。初始化過程的名字由 packageName
和目標解釋器是否是安全解釋器來確定。對於通常的解釋器,初始化過程的名字的形式是
pkg_Init,這裏 pkg 與 packageName 相同,但是第一-
茼r母被轉換成大寫而所有其他字母被轉換成小寫。例如,如果 packageName
是 foo 或 FOo,則初始化過程的名字將是 Foo_Init。
如果目標解釋器是一茼w全解釋器,則初始化過程的名字將是 pkg_SafeInit
而不是 pkg_Init。寫 pkg_SafeInit 函數-
n仔細,在包中提供的弁鄐丑A只用由不可信任的代碼使用是安全的的那部分初始化安全解釋器。
關於 Safe-Tcl 的詳細的信息,請參見 safe 手冊條目。
初始化過程必須匹配下列鴢 (prototype):
typedef int Tcl_PackageInitProc(Tcl_Interp *interp);
interp 參數標識在其中裝載包的解釋器。初始化過程必須返回 TCL_OK 或
TCL_ERROR
來指示是否成尼髡芋F在有錯誤的情況下,應把解釋器的結果設置為指向一-
蚇欞~消息。初始化過程返回的結果就是 load 命令的結果。
在一蚗野峇允翵C fileName 只進行一次檔案的實際裝載。如果一茧鼎w的
fileName 被裝載到多虒挭擰馱丑A則第一 load
將裝載代碼並調用初始化過程;隨後的 load
將調用初始化過程而不再次裝載代碼 。不可能卸載或姜一茈]。
load 命令還支持同應用靜態連接的包,條件是這些包已經通過調用
Tcl_StaticPackage 過程注冊過了。如果 fileName 是一-
茠臟瞗A則必須指定packageName 。
如果省略了 packageName 或被指定為一茠臟瞗ATcl
嘗試著猜出包的名字。在不同的孕x上可能是不同的。在多數 UNIX -
台上,預設的猜測是接受 fileName 的最後的組成部分,如果前三茼r符是 lib
就去掉它怴A使用所有隨後的 字母和下劃線作為模塊的名字。 例如,命令 load |
libxyz4.2.so 使用模塊名 xyz 而命令 load bin/last.so {} 使用模塊名
last。
如果 fileName 是一茠臟瞗A則必須指定 packageName。load 命令漸用這- |
茼W字查找一蚗R態裝載包(通過調用 Tcl_StaticPackage |
過程注冊的包);如果找到了就使用它。否則,load 命令用這- |
茼W字查找動態裝載包,如果找到就使用它。如果一些不同的檔案被裝載成包的不同版本,Tcl|
選擇被最先裝載的檔案。
nI PORTABILITY ISSUES
Windows
在裝載出現 "library not found" 錯誤的時唌A也有可能是沒找到一-
茖抰鉈w。n查看依賴庫,在一 DOS 控制台中「dumpbin -imports
<dllname>」來查看必須導入那些庫。在當前目錄中裝載一 DLL 的時-
唌AWindows 將忽略作為一-
虒纁|指定符(specifier)的「./」,轉而使用一次啟發式(heuristic)的查找來找到這-
DLL。n避免如此,裝載DLL 就n用
load [file join [pwd] mylib.DLL]
BUGS
如果以不同的fileNames 裝載同一蚗仵蛂A它將被多次載入這-
荈i程的地址空間。在不同的系統上裝載的行為是不同的(一些系統可以檢測多餘的裝載,其他的可能不能)。
SEE ALSO
info sharedlibextension, Tcl_StaticPackage(3), safe(n)
r KEYWORDS
binary code, loading, safe interpreter, shared library
[]
Hhh
[]
2001/08/30
m Linux manUpn:
http://cmpp.linuxforum.net