[問題] 詢問dlopen()相關的使用法

看板LinuxDev作者 (路人甲)時間14年前 (2011/07/18 21:46), 編輯推噓0(006)
留言6則, 3人參與, 最新討論串1/1
各位版友,有以下的問題想要請教一下: 我今天看到一段程式一直無法理解,所以上來請問一下版友 我先敘述一下問題,有一個shared lib:gpio.so裡面有一個 函式int module_init_gpio(void *data){},在程式中使用dlopen()來呼叫 ,程式碼概述如下: void *module = NULL; int (*init) (void); int retval = 0; module = dlopen("gpio.so", RTLD_LAZY); //回傳值module沒有問題 dlerror(); //清空錯誤訊息 init = dlsym(module, "module_init_gpio"); if (dlerror()) { printf("don't find"); return NULL; } retval = (*init)(); //<<不瞭解這段的用意 if (retval) { printf("module initiate fail"); return NULL; } return module; 我的問題是,這行程式碼 retval = (*init)(); 的用意是什麼 我在module_init_gpio()中印訊息,不知道為何沒有印出來 看來是沒有執行該函式,也有可能是我自己耍笨誤會了,請版友指正謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.145.151

07/18 22:39, , 1F
那行的用意是取得你要拿來用的函式的指標
07/18 22:39, 1F

07/18 23:02, , 2F
可能吧,我的直覺還是執行了module_init_gpio,不知是不是耍笨
07/18 23:02, 2F

07/18 23:03, , 3F
漏印了,不過如果是function point應該是不用加"*"才對
07/18 23:03, 3F

07/19 20:21, , 4F
init是函式指標,*init是取得函式位址,(*init)()執行函式
07/19 20:21, 4F

07/22 00:46, , 5F
恩,沒錯,經過實驗,是我沒印出來,這段確實執行了init的對
07/22 00:46, 5F

07/22 00:46, , 6F
映函式,謝謝各位版友的幫忙
07/22 00:46, 6F
文章代碼(AID): #1E93b4lx (LinuxDev)