因此,在我的用户空间程序中,我正在调用一些函数,如bpf_object__open_file
,它们是安装有PKG_CONFIG_PATH=/build/root/lib64/pkgconfig DESTDIR=/build/root make install
的libbpf
库的一部分
所以当我编译时,它编译得很好,这个命令没有错误
clang -L /build/root/usr/lib64/ -I /usr/include/ -Wall -o user u.c -lbpf
所以这些文件存在于我的/build/root/usr/lib64目录中
libbpf.a libbpf.so libbpf.so.0 libbpf.so.0.7.0 pkgconfig
但当我像一样运行程序时
sudo ./user
它抛出
./user: error while loading shared libraries: libbpf.so.0: cannot open shared object file: No such file or directory
所以基本上我正在创建共享库,给出路径,但为什么运行程序无法找到我的libbpf.so.0
共享库
有人能告诉我为什么我收到的消息找不到图书馆的吗
正如Qeole在评论中提到的那样
所以我做了这个
root@/dir/#ldd/用户
它给了我这个输出,没有任何位置,它试图在哪里找到路径目录
linux-vdso.so.1 (0x00007ffcd77e7000)
libbpf.so.0 => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9b3943c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9b39642000)
您应该将libbpf库目录添加到LD_LIBRARY_PATH
变量中。
$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/build/root/usr/lib64
$ export LD_LIBRARY_PATH
然后继续运行程序。注意,如果您使用sudo运行它,您可能还需要设置root的LD_LIBRARY_PATH
$ sudo su
# LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/build/root/usr/lib64
# export LD_LIBRARY_PATH
# ./user
您可以验证是否使用相同的ldd命令找到了libbfp。