2 回答

TA貢獻1911條經驗 獲得超7個贊
你這段代碼應該沒問題,我那libstdc++試過了,沒錯。
問題應該在你的/root/RecordDll//Release/libRecordDll.so,
這個動態(tài)庫GetInfo函數有bug。指針錯誤或者數據越界。
我這代碼:
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main(void)
{
// /usr/lib/libstdc++.so.6
int (*mygetchar)(void);
const char *errmsg = "";
printf("begin!\n");
void *SoLib = dlopen("/usr/lib/libstdc++.so.6", RTLD_LAZY);
printf("111\n");
if (NULL == SoLib)
{
printf("222\n");
fprintf(stderr, "Failed to load libstdc++.so.6:%s\n", dlerror());
return 1;
}
dlerror();
printf("333\n");
*(void **)(&mygetchar) = dlsym(SoLib, "getchar");//
printf("444\n");
if (NULL != (errmsg = dlerror()))
{
printf("%s\n", errmsg);
return 1;
}
printf("555\n");
int ret = mygetchar();
printf("%d\n", ret);
dlclose(SoLib);
return 0;
}
上面代碼跑沒問題的,你的要錯就是在動態(tài)庫本身了。
“還有就是:dlopen()報的錯 ,但是明確的是可以找到SO文件,”
/root/RecordDll//Release/libRecordDll.so
看到了,/RecordDll//Release這中間多了一根右斜桿,路徑錯誤,找到就見鬼了。
- 2 回答
- 0 關注
- 194 瀏覽
添加回答
舉報