在C中加载共享库时出错

时间:2014-04-10 17:25:13

标签: c shared

我试图使用命令:

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); }

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

export LD_LIBRARY_PATH=${HOME}/usr/lib

首先再试一次。

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