uwsgs loading shared libraries: libicui18n.so.58 異常處理

背景node

  • 想使用 ningx + uwsgi + flask 搭建 python 應用環境
  • Python使用的是anaconda3(pyhton 3.6)
  • 依賴包安裝完畢,可是執行 uwsgi 的時候出現以下異常
(py3) [root@localhost ~]# uwsgi
uwsgi: error while loading shared libraries: libicui18n.so.58: cannot open shared object file: No such file or directory

因而乎查看 uwsgi所在地址,而後使用 LDD 查看缺乏的包python

(py3) [root@localhost ~]# which uwsgi
/root/anaconda3/envs/py3/bin/uwsgi
(py3) [root@localhost ~]# ldd /root/anaconda3/envs/py3/bin/uwsgi
    linux-vdso.so.1 =>  (0x00007ffc14fc7000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff6b0347000)
    libm.so.6 => /lib64/libm.so.6 (0x00007ff6b0045000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007ff6afe40000)
    libpcre.so.1 => /lib64/libpcre.so.1 (0x00007ff6afbde000)
    libxml2.so.2 => /lib64/libxml2.so.2 (0x00007ff6af874000)
    libz.so.1 => /lib64/libz.so.1 (0x00007ff6af65d000)
    liblzma.so.5 => /lib64/liblzma.so.5 (0x00007ff6af437000)
    libicui18n.so.58 => not found
    libicuuc.so.58 => not found
    libicudata.so.58 => not found
    libutil.so.1 => /lib64/libutil.so.1 (0x00007ff6af233000)
    librt.so.1 => /lib64/librt.so.1 (0x00007ff6af02a000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007ff6aedf3000)
    libc.so.6 => /lib64/libc.so.6 (0x00007ff6aea30000)
    /lib64/ld-linux-x86-64.so.2 (0x00005634c289c000)
    libfreebl3.so => /lib64/libfreebl3.so (0x00007ff6ae82c000)

經過 LDD 發現 uwsgi 找不到三個包(具體就是 not found 的三個)linux

因而就把anaconda3/lib 下相應的包軟鏈到/lib64下去(64bit 機器,若是時32bit 機器則軟鏈到/lib下c++

(py3) [root@localhost ~]# ln -s /root/anaconda3/lib/libicui18n.so.58 /lib64/libicui18n.so.58
(py3) [root@localhost ~]# ln -s /root/anaconda3/lib/libicuuc.so.58 /lib64/libicuuc.so.58
(py3) [root@localhost ~]# ln -s /root/anaconda3/lib/libicudata.so.58 /lib64/libicudata.so.58

這樣缺失的三個包補充了,那麼在使用ldd 測試結果以下flask

(py3) [root@localhost ~]# ldd /root/anaconda3/envs/py3/bin/uwsgi
/root/anaconda3/envs/py3/bin/uwsgi: /lib64/./libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /lib64/libicui18n.so.58)
/root/anaconda3/envs/py3/bin/uwsgi: /lib64/./libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /lib64/libicui18n.so.58)
/root/anaconda3/envs/py3/bin/uwsgi: /lib64/./libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /lib64/libicuuc.so.58)
/root/anaconda3/envs/py3/bin/uwsgi: /lib64/./libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /lib64/libicuuc.so.58)

這說明仍是缺失CXXABI_ 之類的東西,使用 strings 命令查看結果以下socket

[root@localhost lib64]# strings /usr/lib64/libstdc++.so.6|grep CXXABI
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_TM_1

確實沒有CXXABI_1.3.8  CXXABI_1.3.9 之類的東西,那麼就把 anaconda3 下的libstdc++.so.6移到/lib64下面, libstdc++.so.6就是libstdc++.so.6.0.24的軟鏈(能夠去/lib64下查看ll libstc*),既然確實那就把 anconda3下的高版本高 copy 過去就是測試

把libstdc++.so.6.0.24拷貝到/lib64目錄下。
  cp libstdc++.so.6.0.24 /lib64/
刪除原來的libstdc++.so.6符號鏈接。
  rm -rf libstdc++.so.6
新建新符號鏈接。
  ln -s libstdc++.so.6.0.24 libstdc++.so.6
再次執行查看結果符合就哦了。
(py3) [root@localhost lib64]# uwsgi
*** Starting uWSGI 2.0.17 (64bit) on [Fri May  4 16:07:20 2018] ***
compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-16) on 02 May 2018 11:23:18
os: Linux-3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017
nodename: localhost
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 6
current working directory: /usr/lib64
detected binary path: /root/anaconda3/envs/py3/bin/uwsgi
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 4096
your memory page size is 4096 bytes
detected max file descriptor number: 65536
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
The -s/--socket option is missing and stdin is not a socket.
相關文章
相關標籤/搜索