dlopen

    0熱度

    1回答

    我必須使用dlsym從外部庫加載函數名稱。 但我擔心的是他的功能是通過宏#define定義的。 假設dlopen調用成功,dlsym會在這種情況下使用#defined名稱找到正確的符號嗎? 下面是一個頭文件,其包括#define的函數名稱: #define LogVPrintDebug(context, fmt, args) \ (void) LogVPrint(context, kL

    1熱度

    1回答

    這個問題讓我困惑了一個禮拜,所以我認爲最終可能會問你們幫忙。這裏簡單地說: 我們正在開發一個使用Qt/C++的嵌入式服務器。它是一個非常簡單的服務器,它處理客戶端請求並通過dlopen()/ dlsym()調用加載適當的函數來執行某些特定於供應商的操作。這意味着供應商只需向我們提供C中的.so文件,其功能(對我們而言是透明的)就是我們定義的方式。這將用C語言編寫,因爲它需要做很多低級的事情,而我們

    0熱度

    1回答

    dlopen原型: void * dlopen(const char * filename,int flag); 我需要的是: void * dlopen(const char * pBufferWithSoContents,int flag); 我不想將library.so存儲在文件系統中。我想將它存儲在內存緩衝區中,而不是在文件系統中。任何人都知道我可以使用任何解決方案?

    3熱度

    1回答

    在我的C共享庫中,我想要dlopen()另一個共享庫並檢索此庫所導出符號的列表。 有沒有辦法以編程方式做到這一點,而無需運行nm/objdump? 作爲第二個問題:我如何檢索dlopen()後加載的第二個庫的基地址 - 不知道任何符號的名稱(所以我不能運行dlsym!),而不讀取/ proc /自/地圖? 我曾嘗試以下: struct link_map *imagehandle = (struct

    1熱度

    1回答

    我有一個名爲「test.so」的庫,它使用來自兩個相互引用的庫的函數。如果我在C程序中調用test.so的函數,它工作得很好,所以我假設在C函數中沒有錯誤。 但是,當我從Lua調用它時,由於「未定義符號」,它會引發Seg Fault錯誤。問題是,符號被定義,當我運行nm test.so時,我可以看到它。 閱讀下面 Lua: C++ modules can't reference eachother

    1熱度

    1回答

    辦公室裏的其他人正在討論通過將內部庫的非必要部分分割成單獨的庫並加載它們來減少內存佔用和加載時間。 我做了一些谷歌搜索今晚,得知ld.so負荷與延遲綁定,都ld.so和dlopen負載庫與mmap庫。這似乎意味着,圖書館那些沒有必要的部分已經加載點播,即只要功能不使用/數據頁庫都看不懂, 它不採取空間和 它並不需要時間來加載和分配這些頁面。 所以我認爲他們只是需要確保他們不會主動接觸所有非必要的組

    0熱度

    1回答

    我試圖嵌入的wxPython在wxWidgets的應用程序,我得到以下錯誤: ../src/common/object.cpp(251):斷言「classTable- > Get(m_className)== NULL「在RTTI表中已經在Register():Class」wxCommandEvent「中失敗 - 您是否多次使用了IMPLEMENT_DYNAMIC_CLASS()或將某個目標文件鏈

    6熱度

    1回答

    如果我的可執行文件調用dlopen加載庫但忽略調用dlclose,則庫將保持加載狀態,直到進程退出並且操作系統強制它卸載。 如果我加載a.so它加載b.so,然後調用dlclose上a.so,並操作系統卸載b.so呢? 這與使用微軟等效的LoadLibraryEx的類似場景相比如何?

    1熱度

    1回答

    我有幾個從構建系統中吐出的目標文件(來自C++)。他們有幾個extern "C"-我想在程序中使用的鏈接符號,並且可以通過其他地方的dlopen/dlsym訪問。 當使用gcc編譯爲可執行文件時,這些符號未使用nm -D <executable-here>(即afaik它們不是動態符號)列出。 如何讓它們在編譯後的可執行文件中顯示爲動態符號? 我可以改變目標文件和可執行文件的構建標誌,但是改變C+

    5熱度

    1回答

    我在Rust中編寫了一個簡單的基於插件的系統,以獲得使用該語言的一些技巧和經驗。我的系統動態加載庫並在運行時執行它們來初始化每個插件。當從動態加載的庫執行代碼時,我遇到了一個有趣的段錯誤問題。 這是加載和運行插件初始化函數的代碼:(此位正常工作) pub fn register_plugins<'rp>(&'rp mut self) { let p1 = match DynamicLi