在我的開源項目Artha中,我使用libnotify來向用戶顯示被動桌面通知。查找共享庫名稱以與dlload一起使用
而不是靜態鏈接libnotify,通過dlload
在運行時查找共享對象(.so)文件(如果目標機器上可用),Artha在其GUI中公開通知功能。在應用上。開始時,調用dlload
,文件名參數爲libnotify.so.1
,如果它返回一個非空指針,則該特徵將被公開。
這種模式的一個反覆出現的問題是,每次圖書館的版本號被碰撞時,Artha的代碼都需要更新,目前libnotify.so.4
是引發這種情況的最新版本。
是否有一個linux系統調用(不管應用程序運行在哪個發行版),它可以告訴我特定庫的共享對象是否在運行時可用?我知道存在從1到10的枚舉庫的強力選項,我覺得這個解決方案醜陋而且不夠優雅。
此外,如果這可以通過autoconf解決,那麼也可以解決這個問題,也就是說,在構建時,基於目標機器,所產生的configure.h應該有權傳遞給dlload
。
P.S:我認爲好的發行版遵循創建鏈接到libnotify.so.x
的風格,使程序員可以做dlload("libnotify.so", RTLD_LAZY)
和正確的版本號。所以是加載;不幸的是,並非所有的發行版都遵循這一點,包括Ubuntu。
[相關問題](http://stackoverflow.com/questions/2827181/dynamic-loading-of-shared-objects-using-dlopen)。 – legends2k