大多數的報錯都是在centos6裡面因爲gcc版本過低, gcc編譯組件沒有配置到ld.so.conf文档裡,或者php版本過低引起。
安裝swoole開啓http2.0報錯
安裝swoole時, 因爲現在大多數運維在搭建環境的時候不會涉及到http2.0, 所以不會安裝對應的依賴包, 會報出類似以下錯誤:
/tmp/pear/temp/swoole/php_swoole.h:141:2: error: #error "Enable http2 support, require nghttp2 library."
如何解決呢? 以下是安裝代碼:
wget https://github.com/nghttp2/nghttp2/releases/download/v1.34.0/nghttp2-1.34.0.tar.gz tar zxvf nghttp2-1.34.0.tar.gz cd nghttp2-1.34.0 ./configure make && make install
之後,再重新走一遍swoole安裝流程。
centos6 安裝多個gcc版本後編譯swoole彈出錯誤提示:
PHP Warning: PHP Startup: Unable to load dynamic library 'swoole.so' (tried: /usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/swoole.so (/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/swoole.so)), /usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/swoole.so.so (/usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/swoole.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
嘗試過降級swoole, 因爲安裝的是php7.3,所以降級是沒用的, 觸發別的錯誤, 比如_zval關鍵字找不到等等。於是鼓擣ld.so.conf
vim /etc/ld.so.conf
檢查這個文档裡是不是類似這樣的配置項:
include ld.so.conf.d/*.conf /lib /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64
如果你不願意在ld.so.conf引入/usr/local/lib64這個目錄?
看看/usr/local/lib64這個目錄裡有沒有libstdc++.so.6.0.18這個文档, 有的話拷貝到/usr/lib64目錄裡:
cp /usr/local/lib64/libstdc++.so.6.0.18 /usr/lib64
接下來就應該可以了最好也別亂來了, 畢竟這個東西捅咕捅咕就會爆的...
編者按: 前段時間疏於維護, 命令自己沒跑通就放上來了, nghttp2-1.30的路徑已經403無法下載了, 現在改成1.34版本的下載路徑,後面沒寫的make install也添加上了, 感謝熱心的朋友評論糾錯!
2 樓 IP 124.192.***.4 的嘉賓 说道 : 很久前
3 樓 IP 223.104.***.44 的嘉賓 说道 : 17天前