我有以下代碼,它只從當前目錄加載庫test.so,並在該庫中執行version
函數。應該返回的是一個字符串。反而返回的是堆棧中的垃圾(指針位置可能?)。有誰知道爲什麼下面的代碼會失敗。動態庫函數調用
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main(int argc, char **argv){
void *handler;
char *(*version);
char *error;
handler = dlopen("./test.so", RTLD_LAZY);
if(!handler){
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
}
dlerror(); //Flushes any existing error
*(void **)(&version) = dlsym(handler, "version");
if((error = dlerror()) != NULL){
fprintf(stderr, "%s\n", error);
exit(EXIT_FAILURE);
}
printf("%s\n", version);
dlclose(handler);
exit(EXIT_SUCCESS);
}
將'version'轉換爲'(char *)版本'仍然返回垃圾。 – Blackninja543