我试图调用一个c程序,它从配置文件中返回给定关键字的值
尝试调用程序时,显示以下错误:

**Testprintenv: error while loading shared libraries: libodbc.so.1: cannot open shared object file: No such file or directory**

我们之前已经安装了easysoft并卸载回来(删除了所有目录)。
以下依赖项在Linux机器上显示
**
-bash-4.1$ ldd Testprintenv
        linux-vdso.so.1 =>  (0x00007fffc0bdb000)
        libodbc.so.1 => not found
        libodbcinst.so.1 => not found
        libc.so.6 => /lib64/libc.so.6 (0x000000397b200000)
        /lib64/ld-linux-x86-64.so.2 (0x000000397ae00000)

**
当我们在solaris上尝试相同的程序时,计算机依赖项会以不同的方式显示,并且执行时不会出现任何错误:
[Testuser]$ ldd Testprintenv
        libsocket.so.1 =>        /lib/libsocket.so.1
        libnsl.so.1 =>   /lib/libnsl.so.1
        libc.so.1 =>     /lib/libc.so.1
        libmp.so.2 =>    /lib/libmp.so.2
        libmd.so.1 =>    /lib/libmd.so.1
        libscf.so.1 =>   /lib/libscf.so.1
        libdoor.so.1 =>  /lib/libdoor.so.1
        libuutil.so.1 =>         /lib/libuutil.so.1
        libgen.so.1 =>   /lib/libgen.so.1
        libm.so.2 =>     /lib/libm.so.2
        /platform/SUNW,SPARC-Enterprise/lib/libc_psr.so.1

了解为什么依赖关系(libodbc.so.1)只出现在Linux上以及如何解决?
提前谢谢你,

最佳答案

是否仍要检查c可执行文件与ldd以外的库之间的关系?
任何关于依赖关系(libodbc.so.1)为什么只出现在
Linux和如何解决?
1)如果你想知道为什么会有依赖关系,我建议你试着寻找共同的符号。不幸的是,您必须安装libodbc库,因为无法从Testprintenv二进制文件中找到要与此库链接的符号。
所以,这样做:

# symbols needed by the Testprintenv binary:
nm -uD Testprintenv | tr -s " " | cut -f 3 -d" " > /tmp/symbols_needed

# symbols provided by the libodbc
nm --defined-only -D /lib/PATH_TO_YOUR_LIBRARY/libodbc.so.1 | cut -f 3 -d " " > /tmp/symbols_lib

# intersection of the two sets:
grep -w -F -f /tmp/symbols_needed /tmp/symbols_lib

最后一个命令将列出testprintenv需要的符号和libodbc提供的符号。
2)如何解决问题?
首先,安装库(libodbc),它现在可以工作了吗?
如果没有,请确保它在standard directories中。
如果没有,请将libodbc所在的目录添加到ld_preload环境变量中,例如:LD_PRELOAD=/home/ivan/my_lib/

关于c - Testprintenv:加载共享库时出错:libodbc.so.1:无法打开共享对象文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24406861/

10-13 05:10