我是新的C,我的知識的缺乏很抱歉(我這裏C-書真的是巨大的:)擴展動態鏈接共享庫?
我想延長與封閉源代碼的共享庫(libcustomer.so),但公衆已知的api。
是這樣的可能嗎?
- 命名libcustomer.so到liboldcustomer.so
- 創建一個擴展的共享庫libcustomer.so(以便其他人含蓄地使用擴展的一個)
- 鏈接liboldcustomer.so到我的擴展libcustomer.so通過-loldcustomer
- 直接轉發任何額外的未實現的方法到老「liboldcustomer.so」
我不認爲這會工作方式(姓名被編譯成。所以,不是嗎? )。 但是有什麼選擇?
對於#4:有沒有一個通用的方法來做到這一點,或者我必須寫一個像舊的方法,並轉發呼叫(如何?)?
因爲原始libcustomer.so(= liboldcustomer.so)可能會不時變化,所有這些東西都應該動態工作。
出於安全原因,我們的系統沒有LD_PRELOAD(否則我會採取:()。
想想擴展驗證的檢查&一些更好的NPE-handlings。
預先感謝您的幫助!
編輯:
我只是執行我的擴展如圖所示的答案,但我此刻有一個未處理的情況下:
如何從擴展庫中「代理」結構?
例如,我有這樣的:
customer.h:
struct customer;
customer.c:現在
struct customer {
int children:1;
int age;
struct house *house_config;
};
,在我的客戶extension.c我寫的所有公共方法形式爲customer.c,但我如何「傳遞」結構?
非常感謝您的時間&幫助!
您的第一個附加問題的答案已經給出。第二個是密切相關的 - C/C++不包含任何二進制元信息,如Java/.NET,因此您無法猜測「客戶」結構的定義可能如何。即使您記得此結構中字段的類型和名稱,編譯器設置可能會出現問題 - 例如字段對齊。 –
好的,謝謝。我現在將嘗試發佈的答案:) –