【问题标题】:How to fix Segmentation fault while accessing shared library function in C programming?如何在 C 编程中访问共享库函数时修复分段错误?
【发布时间】:2018-10-12 07:43:47
【问题描述】:

我创建了一个名为 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 命令中的-lshared 吗?
  • 试试cp libshared.so /usr/lib/。你可能会喜欢unix.stackexchange.com/questions/22926/…
  • 我按照你说的复制了库文件。但它没有用。所以我像这样导出库文件export LD_LIBRARY_PATH=/usr/lib/ 然后我检查了echo $LD_LIBRARY_PATH 以查看它是否已设置。但是分段错误仍然存​​在
  • @TomekSzpakowicz 不,我没有。但是一旦这样做,它就起作用了。谢谢

标签: c segmentation-fault shared-libraries


【解决方案1】:

在第二个 gcc 命令中:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2017-11-18
    • 2014-12-25
    相关资源
    最近更新 更多