我创建了一个名为library.c的共享库文件

#include<stdio.h>
int Addition(int a, int b)
{
    int s;
    s = a + b;
    return s;
}

调试共享库
gcc -shared -o libshared.so Library.c

创建一个访问共享库函数的小程序
#include<stdio.h>
int Addition(int a, int b);
void main(int argc, char *argv[])
{
    int total;
    total = Addition(19, 23);
    printf("Total = %d\n", total);
}

调试程序
gcc -o foo foo.c -L. -shared

执行程序,我得到错误
Segmentation fault

使用gdb我得到了电流输出
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000001 in ?? ()
(gdb) bt
#0  0x0000000000000001 in ?? ()
#1  0x00007fffffffe4ca in ?? ()
#2  0x0000000000000000 in ?? ()

最佳答案

在第二个gcc命令中:

gcc -o foo foo.c -L. -shared

你有-shared而不是-lshared因此,您不用链接到libshared.so而是将foo构建为一个共享库由于某些原因,在系统上尝试执行共享库会导致segfault,而不是生成更有意义的错误消息。

关于c - 如何在C编程中访问共享库功能时解决段错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52774676/

10-11 21:58
查看更多