Testprintenv:加载共享库时出错:libodbc.so.1:无法打开共享对象文件
我试图调用一个C程序,该程序从配置文件中返回给定关键字的值 尝试调用程序时,显示以下错误:Testprintenv:加载共享库时出错:libodbc.so.1:无法打开共享对象文件,c,linux,shared-libraries,solaris,dynamic-linking,C,Linux,Shared Libraries,Solaris,Dynamic Linking,我试图调用一个C程序,该程序从配置文件中返回给定关键字的值 尝试调用程序时,显示以下错误: **Testprintenv: error while loading shared libraries: libodbc.so.1: cannot open shared object file: No such file or directory** 我们以前安装过EasySoft,后来又卸载了(删除了所有目录) Linux机器上显示了以下依赖项 ** ** 当我们在Solaris上尝试相同的程序时
**Testprintenv: error while loading shared libraries: libodbc.so.1: cannot open shared object file: No such file or directory**
我们以前安装过EasySoft,后来又卸载了(删除了所有目录)
Linux机器上显示了以下依赖项
**
**
当我们在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上,以及如何解决
提前谢谢,好的
首先是一些解释:
您正在尝试使用一个需要的软件
根据您自己的ldd结果显示:
**Testprintenv: error while loading shared libraries: libodbc.so.1: cannot open shared object file: No such file or directory**
现在关于LDD,手册页上说:
ldd-打印共享库依赖项
因此,您试图运行的这个程序确实需要提供的libodbc。
您可以检查rpmfind
由于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用户能够连接到任何数据库
是否有检查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),它现在可以工作了吗
- 如果没有,请确保它位于
- 如果没有,请将libodbc所在的目录添加到LD_PRELOAD环境变量中,如:
LD_PRELOAD=/home/ivan/my_lib/
# 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