dlopen

    0熱度

    1回答

    我有壞的共享庫(未定義的符號)。 當我第一次調用dlopen()時,我從dlerror()得到一個NULL結果,並顯示正確的錯誤信息。 如果我忽略錯誤消息並使用相同的參數調用dlopen(),我第二次得到一個非空的句柄(表示庫已成功加載)。這顯然是錯誤的。 在Ubuntu 11.04(IIRC,10.10沒有這個問題)下會發生此問題。 Centos 5.5不會出現這個問題。 特別是,這個問題發生在

    11熱度

    4回答

    我需要從另一個程序中調用一個函數。如果其他程序是一個庫,我可以簡單地使用dlopen和dlsym來獲取該函數的句柄。不幸的是,另一個程序是一個Unix可執行文件,並且將它作爲一個庫進行構建並不是一種選擇。對可執行文件試圖執行dlopen()給出了這樣的錯誤消息: dlopen([...]/testprogram, 1): no suitable image found. Did find: [..

    10熱度

    3回答

    在我的節目,我有如下所示 /* libname may be a relative path */ void loadLib(char const *libname) { void *handle = dlopen(libname); /* ... */ dlclose(handle); } 在/* .. */代碼,我需要讀取內存映射文件/proc/self/

    3熱度

    2回答

    在我正在開發的項目中,我們提供了動態加載附加功能的可能性。爲此,我們使用dlopen。 爲了找到這個庫,我們有一些我們稱之爲模塊路徑的東西。在那裏,我們有一個默認路徑,其中共享庫是(其中很多是出貨)。 目前我們有兩個默認路徑:我們首先查看共享庫的構建目錄,然後查看安裝目錄。這是因爲它也應該可以在不安裝它的情況下運行應用程序(所以在這種情況下,它需要首先查看構建目錄)。 現在的問題在於,如果用戶從源

    6熱度

    1回答

    我有先加載一幅名爲.dylib讓我們稱之爲libFirst.dylib使用以下命令軟件:上 void* handle = dlopen(path.c_str(), RTLD_LAZY | RTLD_GLOBAL); 後來從加載libFirst.dylib功能我試圖內使用相同的命令加載另一個名爲.dylib但libSecond.dylib,這個共享庫的加載讓我在我的Xcode控制檯以下警告: e

    5熱度

    2回答

    我使用setenv來設置DYLD_LIBRARY_PATH,因此當我執行dlopen()時,它將具有找到我的.dylib的正確路徑,但是當我執行dlopen()時,它不會似乎無法搜索我添加到DYLD_LIBRARY_PATH的路徑。 從我能收集到的對DYLD_LIBRARY_PATH所作的更改在重新執行過程發生之前不會生效。它是否正確? 此外,如果這是正確的,有沒有辦法設置DYLD_LIBRARY

    5熱度

    3回答

    我已經包裝了許多系統調用函數,如write(),open()等,LD-PRELOAD用於覆蓋原始系統調用。此外,我定義了一些更多的功能,並將其製作成碎片庫。 我想從不同的應用程序進程到這些共享庫的所有系統調用進入共享庫之前。我怎樣才能做到這一點? 感謝

    8熱度

    2回答

    我有一個可執行文件和一個動態庫(.so)。該庫導出一些符號和可執行調用成功。但我想讓庫調用可執行文件的功能。我一直試圖做的可執行如下: //test extern "C" void print(const char * str) { std::cout << str << std::endl; } ,這在庫: extern "C" void print(const char *)

    2熱度

    4回答

    我有兩個文件: RollDice.cpp #include "RollDice.h" #include "./IPlugins.cpp" #include "./IPluginFunctions.cpp" #include <iostream> RollDice::RollDice(IPluginFunctions &iPluginFunctions) : IPlugins(

    3熱度

    1回答

    當使用dlfcn家人像這樣: #include <stdio.h> #include <dlfcn.h> typedef int(*timefunc_t)(void*); int main() { timefunc_t fun; void* handle; handle = dlopen("libc.so.6", RTLD_LAZY); fun