链接/注册一个.so文件

Linking/Registering a .so File

本文关键字:一个 so 文件 注册 链接      更新时间:2023-10-16

我刚刚使用一个定制的第三方供应商提供的一些库编译了一个测试应用程序。没有安装/包管理器。应用程序按预期构建。然而,当我去运行它时,它似乎找不到一个必要的。so文件(我已经在同一目录下了):

[diego@localhost Debug]$ ls
esdcan  libntcan.so.3  makefile  objects.mk  sources.mk  src
[diego@localhost Debug]$ ./esdcan
./esdcan: error while loading shared libraries: libntcan.so.3: cannot open shared object file: No such file or directory
[diego@localhost Debug]$ ldd esdcan
    linux-vdso.so.1 =>  (0x00007fff125ff000)
    libntcan.so.3 => not found
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000031d2600000)
    libm.so.6 => /lib64/libm.so.6 (0x00000031c7600000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000031c8600000)
    libc.so.6 => /lib64/libc.so.6 (0x00000031c7200000)
    /lib64/ld-linux-x86-64.so.2 (0x00000031c6e00000)

我肯定我漏了一步,我只是完全不知道那一步是什么。

在构建完成后运行ldconfig,并确保当前目录在您的/etc/ld.so.conf文件中,以便当前目录是查找共享库的可信目录。

设置LD_LIBRARY_PATH env变量为当前目录

[diego@localhost Debug]$ LD_LIBRARY_PATH=. ./esdcan
/etc/ld.so.conf           File containing a list of colon, space, tab,  new-
                          line,  or  comma-separated  directories in which to
                          search for libraries.

也可以设置$LD_LIBRARY_PATH环境变量

您可以将它复制到/usr/lib之类的地方(这有点侵入性),或者您可以尝试设置LD_LIBRARY_PATH=[包含libntcan.so的绝对(?)路径]。[3]:LD_LIBRARY_PATH before run .