我刚刚使用一个定制的第三方供应商提供的一些库编译了一个测试应用程序。没有安装/包管理器。应用程序按预期构建。然而,当我去运行它时,它似乎找不到一个必要的。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 .