【问题标题】:Error loading shared library in C在 C 中加载共享库时出错
【发布时间】:2014-05-24 13:33:54
【问题描述】:

我正在尝试使用命令:

gcc -I${HOME}/usr/include -L${HOME}/usr/lib -lsodium test.c

但是当我尝试运行 a.out 时,它给出了错误:

./a.out: error while loading shared libraries: libsodium.so.4: cannot open shared object file: No such file or directory

但 libsodium.so.4 肯定在 ${HOME}/usr/lib 目录中。这是怎么回事? test.c 只是

#include <stdio.h>
#include "sodium.h"
int main(int argc, char** argv)
{ return (0); }

【问题讨论】:

    标签: c shared


    【解决方案1】:

    export LD_LIBRARY_PATH=${HOME}/usr/lib
    

    先再试一次。

    export ... 将告诉 loader (ld-linux.so) 也搜索 ${HOME}/usr/lib 以查找共享库。

    【讨论】:

      【解决方案2】:

      您需要告诉运行时链接器在哪里可以找到 .so。通常这是通过 LD_LIBRARY_PATH 环境变量完成的,因此您可以像这样调用 a.out(假设您使用的是类似 bash 的 shell):

      LD_LIBRARY_PATH=${HOME}/usr/lib ./a.out

      【讨论】:

        【解决方案3】:

        ${HOME}/usr/lib 不在您的运行时库路径中。

        您可以使用 gcc 选项 -Wl,-rpath,${HOME}/usr/lib 将路径烘焙到可执行文件中,或者在执行程序之前设置环境变量 LD_LIBRARY_PATH=${HOME}/usr/lib

        ldd a.out 将告诉您是否可以在您的运行时库路径中找到 libsodium,如果可以,则告诉您库的位置。

        【讨论】:

          猜你喜欢
          • 2010-12-15
          • 2011-05-29
          • 1970-01-01
          • 2017-11-05
          • 2014-12-09
          相关资源
          最近更新 更多