我编写自己的库:
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 类型错误造成的。当我在一个文件中对其进行测试时,分配给 dlsym 的字符可以正常工作。
生成文件:
main: mainname.c
gcc -c -fPIC lib.c
gcc -shared -fPIC -o lib.so lib.c
gcc -o main mainname.c -ldl