Provided by: manpages-zh_1.6.3.6-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

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh