2011-07-25 49 views
0

我在問c的解決方案,而不是命令行選項。如何指示ld使用c查找其他目錄?

我敢肯定它存在的原因是,Apache可以被指示加載.so動態

load modules/mod_perl.so 

UPDATE

是不是效率太低,如果我需要尋找與dlsym一個接一個?

回答

2

如果您想要動態加載自己的模塊,請研究功能系列的dlopen/dlsym。這是Apache用來加載模塊的東西。 man dlopen有所有的信息。

如果要鏈接共享庫,則必須使用使用鏈接程序命令行選項指定這些庫位於何處。否則你的程序將無法執行。沒有多少C編程可以幫助甚至不會啓動的程序。

+0

你的意思是Apache用'dlsym'逐個搜索函數地址嗎?我認爲這太低效了...... –

+0

@Je Rog:假設在dlsym()的開銷太大的情況下,apache會緩存函數指針dlsym()返回的值。 – janneb

+0

Apache需要查找的符號並不多。準確地說,每個模塊只有一個。看看源代碼!在Apache的情況下,它不是一個函數,它是一個結構,它保存了Apache使用模塊所需的所有內容。在其他情況下,它可能是一個功能或一些功能。如果您的API太大(超過十幾個函數),則將所有要導出的函數指針放在結構中,然後導出該結構。 –

相關問題