簡體   English   中英

Testprintenv:加載共享庫時出錯:libodbc.so.1:無法打開共享對象文件

[英]Testprintenv:error while loading shared libraries:libodbc.so.1: cannot open shared object file

我正在嘗試調用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),現在可以使用嗎?
  • 如果不是,請確保它在標准目錄中
  • 如果不是,則將libodbc所在的目錄添加到LD_PRELOAD環境變量,例如: LD_PRELOAD=/home/ivan/my_lib/

好,

首先來一些解釋:

您正在嘗試使用需要UNIXODBC的軟件。

根據您的Ldd OWN結果,它表示:

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

現在關於LDD的手冊頁說:

ldd-打印共享庫依賴項

因此,您嘗試運行此程序是否需要 UNIXODBC提供的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用戶可以連接到任何數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM