2010-12-23 146 views
15

我在Ubuntu上使用g ++編譯器運行eclipse,並試圖運行使用xerces的示例程序。加載共享庫時出錯

構建產生的任何錯誤然而,當我試圖運行程序,我會收到此錯誤:在我所包括在Eclipse的一個庫的目錄/opt/lib

error while loading shared libraries: libxerces-c-3.1.so: cannot open shared object file: No such file or directory

libxerces-c-3.1.so是。當我檢查文件夾時,文件在那裏。當我執行echo $LD_LIBRARY_PATH時,/opt/lib也被列出。

問題出在哪裏?謝謝。

一種ldd libxerces-c-3.1.so命令產生以下輸出:

linux-vdso.so.1 => (0x00007fffeafff000) 
libnsl.so.1 => /lib/libnsl.so.1 (0x00007fa3d2b83000) 
libpthread.so.0 => /lib/libpthread.so.0 (0x00007fa3d2966000) 
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fa3d265f000) 
libm.so.6 => /lib/libm.so.6 (0x00007fa3d23dc000) 
libc.so.6 => /lib/libc.so.6 (0x00007fa3d2059000) 
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fa3d1e42000) 
/lib64/ld-linux-x86-64.so.2 (0x00007fa3d337d000) 
+0

[加載共享庫時出現Linux錯誤:無法打開共享對象文件:沒有此文件或目錄]可能的重複(http://stackoverflow.com/questions/480764/linux-error-while-loading-shared-libraries -cannot-open-shared-object-file-no-s) – 2016-03-01 18:31:57

回答

4

我將所有庫文件從/ opt/lib複製到/ usr/lib中,並且該程序現在可以工作。感謝您的迴應。

3

運行ldd libxerces-c-3.1.so並檢查輸出,看看是否所有的依賴關係可以找到。

+0

我用ldd命令的結果編輯了主題。我對Linux相當陌生,所以我不太確定輸出是什麼意思。我如何知道我是否擁有所有共享庫?那些用箭頭列出的那些? – user459811 2010-12-23 00:53:42

22

嘗試以root身份運行ldconfig以查看它是否解決了問題。

+4

有人可以解釋爲什麼這個工程? – 2016-03-21 18:29:46

1

嘗試安裝庫libxerces-c3.1 as。使用下面提到的命令來安裝庫。

sudo apt-get install libxerces-c3.1 

這對我來說就像一個魅力。

1

有很多方法可以做到這一點,大部分已經在這裏提到。但是你想要避免意外地將你的庫文件複製到系統中。這很容易完成,因爲人們對於爲圖書館製作原創獨特的名字幾乎沒有想象力。

因此,有幾件事情要考慮:

  • 你需要這些文件到您的系統的永久組成部分?
  • 你只需要安裝測試和頻繁更新?
  • 您是否只需要它們運行特定命令一次或兩次?
  • 您的本地圖書館位於哪裏?

要查找您系統上的各種庫的位置(除了使用find),看這裏:

cat /etc/ld.so.conf  
cat /etc/ld.so.conf.d/* 

在Linux上也有一些標準的地方:

/lib   # for base system (don't use this!) 
/usr/lib  # for package manger installed apps 
/usr/local/lib # for user installed apps 

有許多其他人,但你應該最有可能留在/usr/local/lib。 接下來,您需要告訴您的系統在哪裏可以找到這些庫。酷系統(誰知道他在做什麼)的方式是使用ldconfig,但是,如果你在這裏犯了一個錯誤,你可能會做你後悔的事情。使用該命令最安全的方法是使用標記-v -n使命令詳細並指定您需要添加的庫目錄。

sudo ldconfig -v -n /usr/local/lib/your-uber-libs 

完成。但是,如果你只是想測試的東西,那麼還是用你的LD_LIBRARY_PATH直接在命令行,像這樣:

LD_LIBRARY_PATH=/usr/local/lib/your-uber-libs ./your_uber_command 

另外,以下內容添加到您的.bashrc腳本。

​​

現在您可以運行您的動態鏈接命令。