我试图使用命令:
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); }
答案 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
共享库。