Как напечатать переменную dlsym()?
Я пишу свою собственную библиотеку:
struct utsname Lib;
char *s(){
uname(&Lib);
return Lib.sysname;
}
Когда я хочу напечатать имя моей системы:
int main(int argc, char *argv[]){
void *lib=dlopen(".../Mylib.so",RTLD_LAZY);
if(!lib)
dlerror();
else{
char *a;
int opt;
while((opt = getopt (argc, argv, "sn")) != -1){
switch(opt){
case 's':
a= (char*)dlsym(lib, "s");
printf("test: %s", a);
break;
}
}
}
if(lib)
dlclose(lib);
return 0;
}
Я получаю что-то вроде:
UH▒▒H▒=▒
Я думаю, что это вызвано неправильным использованием моего персонажа. Когда я тестировал его в одном файле, char, назначенный для dlsym, работает нормально.
Makefile:
main: mainname.c
gcc -c -fPIC lib.c
gcc -shared -fPIC -o lib.so lib.c
gcc -o main mainname.c -ldl
1 ответ
Как было упомянуто, вы не вызывали функцию.
char *(*s)();
…
s = dlsym(lib, "s");
printf("test: %s", s());
было бы несколько более читабельным способом сделать это.