我正在尝试调用一个C-Program,它从配置文件中返回给定关键字的值
在尝试调用程序时,它会显示以下错误:
**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上以及如何解决?
提前致谢,
答案 0 :(得分:1)
有没有检查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)如何解决问题?
LD_PRELOAD=/home/ivan/my_lib/
答案 1 :(得分:0)
确定,
首先解释一下:
您正在尝试使用需要UNIXODBC的软件。
根据你自己的ldd结果,它说:
**Testprintenv: error while loading shared libraries: libodbc.so.1: cannot open shared object file: No such file or directory**
关于LDD,手册页说:
ldd - 打印共享库依赖项
所以这个程序你试图运行 DOES NEED 提供的BY UNIXODBC libodbc。 您可以查看rpmfind here。
由于Solaris是另一个平台,它可能会或不会使用它。 (因为Solaris有其他方法来处理你想要做的事情)
因此,请检查链接并阅读安装部分。
您的软件共享链接到UNIXODBC而非静态的原因是
Dynamic Data Binding
This allows the user or the system administrator to easily configure an application to use any ODBC compliant data source. This is perhaps the single biggest advantage of coding an application to the ODBC API and to purchase these applications. Dyamic binding allows the end-user to pick a data source, ie an SQL Server, and use it for all data applications without having to worry about recompiling the application.
通过使用非静态依赖,easysoft用户可以连接到任何数据库。