dlopen

    3熱度

    1回答

    假設我有一個庫--foo.so。當我構建我的二進制文件(需要這個庫)時,我可以(1)鏈接foo.so,或者,(2)在程序源代碼中,dlopen這個庫,然後調用該庫提供的函數 Is there當我從庫中調用函數時,(1)和(2)之間的任何性能差異?請注意,我知道會有不同的初始化特性(如dlopen的開銷,第一次使用符號的開銷等),但在穩定狀態下,兩種選擇都同樣快,還是更快? 謝謝。

    0熱度

    1回答

    我正在研究C庫的測試環境。該庫廣泛使用全局變量,我想檢查測試代碼。不幸的是,我必須動態加載庫(使用libdl)才能重置函數靜態變量。這樣我必須使用dlsym()加載每個全局,並且我必須手動將它們逐個轉換爲正確的類型。有沒有什麼辦法來自動化,並以某種方式獲得變量的類型信息? 據我看到libdl沒有這樣的功能。我想知道我可以鏈接到gdb,使用它來訪問共享庫全局變量,但我沒有設法找到任何有關這種可能性的

    4熱度

    1回答

    我正在寫一個Java代理與JVMTI進行交互。由於我不會涉及的原因,我需要使用JVMTI(java進程中的C接口),而不是像java.lang.instrument或JDI這樣的Java API。我希望能夠做一些似乎不被直接支持的事情。 有沒有辦法在Java進程啓動後加載代理? 有沒有辦法從JVMTI代碼內部或從進程外部卸載Java代理(不會殺死整個Java進程)?例如,如果我能找到動態加載模塊的

    2熱度

    1回答

    我必須在Linux中動態加載.so,但我發現很難處理相同的名稱庫。 我有2 libtest.so在不同的目錄,他們依賴於其他不同的庫。 我的程序讀取配置文件來決定加載哪個libtest.so。例如: /usr/kyle/v1/libtest.so /usr/kyle/v2/libtest.so 它們都沒有在ldconfig中註冊。 那麼如何使用dlopen加載不同版本的libtest.so?

    -1熱度

    2回答

    兩種不同的dlopen & dlclose夫婦,在dlopen上被封鎖。 掛在dlopen,它不輸出任何內容,cpuidle降到0%,並且不能通過ctrl + c退出。 LOG_TRACE("attaching..."); handle = dlopen(plugin_path.c_str(), RTLD_LAZY); LOG_DEBUG("dlopen called"); // this

    0熱度

    1回答

    有一個簡單的測試程序,它將dlopen()作爲DSO「/lib/libc.so.6」,然後打印符號「printf」的地址。 #include <dlfcn.h> #include <stdio.h> int main() { void* handle; void (*func)(); char* error_test; if (handle = dlo

    1熱度

    1回答

    我有一個程序調用dlopen(使用RTLD_NOW)來動態加載一個在運行時指定完整路徑但在程序第一次執行時不知道的庫。指定的庫與ANOTHER .so文件動態鏈接,該文件的位置在程序啓動之前還不知道,但在調用dlopen之前已知。關於如何讓這種情況發揮作用的任何想法?謝謝!

    0熱度

    1回答

    我目前正在將一個程序從MIPS平臺移植到Android ARM平臺。該程序有一個動態插件,這是一個共享的文件。該文件將訪問主程序的功能。 我的問題是,我怎麼能得到這樣的文件與未定義的引用鏈接? 我用谷歌搜索,發現在達爾文平臺上有「-undefined dynamic_lookup」標誌。 Android本機構建系統的類似方法是什麼?

    0熱度

    2回答

    我試圖使這個OSX代碼(golfed爲便於討論)在Ubuntu Linux上工作。 cat >main.c <<EOF #include <stdio.h> #include <stdlib.h> #include <dlfcn.h> void provided_by_main() { puts("Hello main!"); } int main() { void *prov

    5熱度

    1回答

    在Linux上,我有一個使用dlopen()加載一些共享庫的C++應用程序,但我懷疑被加載的共享庫的版本不是我期望的版本,因爲我的調試跟蹤代碼沒有出現被執行。 是否有辦法檢查正在運行的進程以查詢它當前打開的所有共享庫以及每個這些庫的路徑?換句話說,類似於ldd,但它適用於正在運行的可執行文件,並列出了運行時加載的庫。