2016-12-02 273 views
4

我想在linux服務器上安裝tensorflow,我只是一個沒有root權限的用戶。我無法通過跳轉服務器將文件傳輸到/從它傳輸。該系統是如下:使用更新版本的glibc時出錯

Linux THENAME_OF_SURVER 2.6.32-573.18.1.el6.x86_64 #1 SMP Tue Feb 9 22:46:17 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

我通過pip install tensorflow安裝tensorflow和tensorflow程序將顯示如下內容:

ImportError: /lib64/libc.so.6: version `GLIBC_2.16' not found

我glibc安裝了新版本的

git clone git://sourceware.org/git/glibc.git cd glibc git checkout --track -b local_glibc-2.16 origin/release/2.16/master mkdir build cd build ../configure --prefix=/home/MYNAME/dependency/glibc-2.16 make -j4 make install

跟着指示在線,我通過改變環境變量:

export LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib

但是這讓我一個問題:我不能使用任何命令。例如,我叫ls,它會提醒我這個樣子:

ls: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

我再接着另一個指令爲以下運行命令:

/home/MYNAME/dependency/glibc-2.16/lib/ld-linux-x86-64.so.2 --library-path /home/MYNAME/dependency/glibc-2.16/lib:$LD_LIBRARY_PATH:/path/to/gcc-5.2.0/lib64:/usr/lib64/:/usr/lib64/ ls (我不知道在哪裏可以找到類似的文件夾gcc-5.2.0,我which gcc顯示/usr/local/sbin/gcc,但它鏈接到/usr/local/gcc-5.3.0/bin/gcc,它不具有lib64的子文件夾)

但隨後與前來以下警告:

ls: error while loading shared libraries: ls: cannot open shared object file

我知道我可以通過出口再次使用ls變量爲空。但我仍然無法使用新版本的glibc。任何人都可以幫助我如何正確鏈接新的glibc?任何建議,將不勝感激!

編輯: 所以進度如下:

  1. LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib python
    會導致python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

  2. /home/MYNAME/dependency/glibc-2.16/lib/ld-2.16.so python
    會導致python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

EDIT2 &摘要:

爲了使就業俄羅斯的回答更詳細的,我會在這裏貼上我的最終解決方案。

我的目標是在沒有root權限的服務器上使用Python中的tensorflow。當輸入tensorflow時,我被警告ImportError: /lib64/libc.so.6: version 'GLIBC_2.16' not found

基於使用俄羅斯的答案,我用下面的運行我的命令:

LD_LIBRARY_PATH=/home/USERNAME/dependency/glibc-2.17/lib/:/lib64/:/usr/local/gcc-5.3.0/lib64/ /home/USERNAME/dependency/glibc-2.17/lib/ld-2.17.so /home/USERNAME/anaconda2/bin/python

拆分命令分爲以下幾部分(我會用???表示,對於不同的人有不同的路徑。):

  1. LD_LIBRARY_PATH=
    • 這部分交易與依賴
    • :手段分裂
    • ???/glibc-2.17/lib/
    • /lib64//usr/local/gcc-5.3.0/lib64/:我通過find/-name 'libgcc_s.so.1'發現這些文件夾,因爲我是
  2. /???/glibc-2.17/lib/ld-2.17.so
  3. /???/python您的可執行文件的路徑。對於Python,import sys; print(sys.executable)來查看你的Python路徑。

其他的事情:

  1. 的glibc-2.17是gnu下載。我選擇了2.17,因爲張量流需要2.17和2.17正常工作。
  2. 此解決方案還有另一個問題。我有時需要在Python中調用shell命令,如os.system('ls')os.system('python xxx.py')。但是,如果我以正常的方式使用它,它會警告我:sh: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument,我還沒有找到足夠好的解決方案。
+0

您是否嘗試過僅爲運行'python'設置'LD_LIBRARY_PATH'變量?即運行單個命令:'LD_LIBRARY_PATH =/home/MYNAME/dependency/glibc-2.16/lib python',然後在提示的提示符處輸入'import tensorflow as tf'? – mrry

+0

@mrry我試過,但它仍然警告相同:'python:加載共享庫時出錯:__vdso_time:無效模式爲​​dlopen():無效參數' –

回答

1

export LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib

This answer解釋了爲什麼LD_LIBRARY_PATH不工作,你應該做些什麼來代替。

看了你的帖子,並試圖...
python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

錯誤通常意味着你有ld-linuxlibc.so.6之間的不匹配。他們必須比賽。

如果您通過/home/MYNAME/.../ld-2.16.so使用直接加載程序調用,那麼您的還必須安排/home/MYNAME/.../libc.so.6加載。

您可以通過適當地將--library-path ...設置爲ld-2.16.so或設置LD_LIBRARY_PATH來實現。

您的命令與ld-2.16 --library-path ... ls差不多正確。您錯過的東西是ld-2.16不是搜索您的PATH。你需要給它full pathname:ld-2.16 --library-path ... /bin/ls

+0

我讀過你的文章並嘗試過'/ home/MYNAME/dependency/glibc-2.16/lib/ld-2.16.so python',但是在加載共享庫時會導致'python:error:__vdso_time:dlopen()的無效模式:無效參數。有什麼遺漏嗎? –

+0

@KahoChan我已經更新了答案。 –

+0

謝謝!我解決了你的指導下的問題。我編輯了我的問題,並最終粘貼了我的詳細解決方案。此解決方案的唯一問題是我無法在Python腳本中使用shell命令。 –