ExtUtils::Mksymlists - 撰寫動態擴充套件的連結器選項檔案
use ExtUtils::Mksymlists;
Mksymlists( NAME => $name ,
DL_VARS => [ $var1, $var2, $var3 ],
DL_FUNCS => { $pkg1 => [ $func1, $func2 ],
$pkg2 => [ $func3 ] );
ExtUtils::Mksymlists
會產生連結器在某些作業系統中用來建立動態擴充套件的共用程式庫的檔案。它通常會在建立擴充套件時從 MakeMaker 產生的 Makefile 中呼叫。連結器選項檔案會透過呼叫 Mksymlists
函式產生,此函式預設會從 ExtUtils::Mksymlists
匯出。它會接收一個參數,即一組鍵值配對,其中會辨識下列金鑰
此項目指定連結器用來辨識擴充套件的名稱,它可能與擴充套件本身的名稱不同(例如,有些連結器會在擴充套件名稱中加上 '_')。如果未指定,它會從 NAME 屬性衍生。目前僅由 OS2 和 Win32 使用。
這與 MakeMaker 中可用的 DL_FUNCS 屬性相同,通常從中取得。其值是對關聯陣列的參照,其中每個鍵是套件名稱,每個值是對函式名稱陣列的參照,這些函式名稱應由擴充套件匯出。例如,可以說 DL_FUNCS => { Homer::Iliad => [ qw(trojans greeks) ], Homer::Odyssey => [ qw(travellers family suitors) ] }
。函式名稱應與 XSUB 程式碼中的相同;Mksymlists
會變更寫入連結器選項檔案的名稱,以符合 xsubpp 所做的變更。此外,如果清單中沒有任何函式以字串 boot_ 開頭,Mksymlists
會為該套件新增引導函式,就像 xsubpp 所做的一樣。(如果清單中存在 boot_<pkg> 函式,則會原封不動地傳遞。)如果未指定 DL_FUNCS,則它會預設為 NAME 中指定的擴充套件的引導函式。
這與 MakeMaker 中可用的 DL_VARS 屬性相同,而且與 DL_FUNCS 一樣,通常透過 MakeMaker 指定。其值是對變數名稱陣列的參照,這些變數名稱應由擴充套件匯出。
如果出於某種原因不想使用預設值(NAME 屬性的最後一個字,例如對於 Tk::Canvas
,FILE 預設為 Canvas
),可以使用此鍵來指定連結器選項檔案的名稱(不含作業系統特定的副檔名)。
這提供了一種替代方式來指定要從擴充套件匯出的函式名稱。其值是對函式名稱陣列的參照,這些函式名稱將由擴充套件匯出。這些名稱會原封不動地傳遞到連結器選項檔案。指定 FUNCLIST 屬性的值會抑制自動產生套件的引導函式。若要仍然建立引導名稱,您必須在 DL_FUNCS hash 中指定套件名稱
Mksymlists( NAME => $name ,
FUNCLIST => [ $func1, $func2 ],
DL_FUNCS => { $pkg => [] } );
此屬性用於指定要匯入擴充套件的名稱。目前僅由 OS/2 和 Win32 使用。
這會提供擴充套件的名稱(例如 Tk::Canvas
),並為其產生連結器選項檔案。
在呼叫 Mksymlists
時,您應該總是指定 NAME 屬性。在大部分情況下,這就夠了。不過,對於不尋常的擴充套件,可以使用其他屬性來提供連結器其他資訊。
Charles Bailey <bailey@newman.upenn.edu>
最後於 1996 年 2 月 14 日針對 Perl 5.002 修訂。