1
Я пишет свой собственный LIB:Как напечатать переменную 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 a. Когда я тестировал его в одном файле, 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
Вы не вызываете функцию. Передайте результат 'dlsym()' указателю на функцию, а затем вызовите его. – cremno
'char (* ptr_fun)()' '* (void **) (& ptr_fun) = dlsym (lib," s ")' 'printf (" test:% s ", (* ptr_fun))' @ cremno Если вы имеете в виду это, это решение снова дает мне UH▒▒H▒ = ▒ – adm
Вы все еще не вызываете функцию. 'a = ((char * (*) (void)) dlsym (lib," s "))();' может быть правильным. Здесь '()' называют это. – cremno