我写了自己的lib:
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▒=▒
我认为这是由于错误地投射我的角色造成的。当我在一个文件中测试它时,分配给dlsym的char工作正常。
生成文件:
main: mainname.c
gcc -c -fPIC lib.c
gcc -shared -fPIC -o lib.so lib.c
gcc -o main mainname.c -ldl
答案 0 :(得分:0)
正如cremno所说,你没有调用这个函数。
char *(*s)();
…
s = dlsym(lib, "s");
printf("test: %s", s());
是一种更易读的方式。