小编aut*_*456的帖子

为什么从共享库加载对象时会出现段错误?

有这个文件:

\n\n

加一c

\n\n
int op(int i){ return i+1; }\n
Run Code Online (Sandbox Code Playgroud)\n\n

主程序

\n\n
#include <stdio.h>\n#include <stdlib.h>\n#include <dlfcn.h>\n\nint main(int argc, char **argv){\n    if (argc<3){\n        printf("usage %s <library> <number>\\n",argv[0]);\n        exit(1);\n    }\n\n    char *lname = argv[1];\n    int num = atoi(argv[2]);\n    void *handle = dlopen(lname, RTLD_LAZY);\n    if(!handle)\n        perror("dlopen");\n\n    int (*opp)(int);\n    opp=dlsym(handle, "op");\n    if(!opp)\n        perror("dlsym");\n\n    printf("number before:%i\\nnumber after:%i\\n",num,opp(num)); \n    dlclose(handle);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

编译为:

\n\n
$cc -fPIC -shared -o plusone.so -ldl plusone.c\n$cc -o main.exe -ldl -Wpedantic main.c\nwarning: ISO C forbids assignment between function pointer and \xe2\x80\x98void *\xe2\x80\x99 …
Run Code Online (Sandbox Code Playgroud)

c error-handling shared-libraries segmentation-fault dlopen

1
推荐指数
1
解决办法
1263
查看次数