私は自分のライブラリを書きます:
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 のキャストが間違っていることが原因だと思います。1 つのファイルでテストしたところ、dlsym に割り当てられた char は正常に動作しました。
メイクファイル:
main: mainname.c
gcc -c -fPIC lib.c
gcc -shared -fPIC -o lib.so lib.c
gcc -o main mainname.c -ldl