我想通了。有些意外,但相當肯定這是解決方案。簡短的答案?如果您收到/usr/bin/mongod: symbol lookup error: /usr/bin/mongod: undefined symbol: _ZN7pcrecpp2RE4InitEPKcPKNS_10RE_OptionsE
那麼你應該從這樣的倉庫安裝pcre
和pcre-devel
:我如何發現這一點基本上,我要辭職自己重新編譯from scratch as outlined in this answer
sudo yum install pcre pcre-devel
詳細信息。除非有很好的理由,否則我不想這樣做。但隨着回答者狀態,重新編譯之前應該安裝以下編譯器項目和相關的庫:
sudo yum install rpm-build redhat-rpm-config gcc gcc-c++ make yum install openssl-devel snappy-devel v8-devel boost-devel python-devel python-nose scons pcre-devel readline-devel libpcap-devel gperftools-devel
好了,所以我這樣做是爲了放下了源代碼重建的基礎。但在安裝中也注意到pcre
正在安裝,因爲它明顯缺失並且需要依賴於pcre-devel
;這是關鍵。當我正準備重新編譯我決定嘗試再次啓動mongod
這樣的:
sudo service mongod start
和檢查。你看,MongoDB安裝再次運行!但爲什麼? This answer here持有線索:
The error was caused by libpcre
changing the signature of RE::Init()
to only take a std::string
, rather than a char*
. This is fixed if you get a newer version of libpcrecpp
, which adds the old interface for backwards compat.
這個問題的答案還建議從源代碼重新編譯,但現在沒有什麼意義,因爲這是我清楚MongoDB的安裝是重新啓動和運行。所以,我在開發機器跑起來lsof
看到這一點:
sudo lsof | grep pcre
nginx 892 deploy mem REG 253,2 97140006 (deleted)/lib64/libpcre.so.0.0.1 (stat: No such file or directory)
nginx 893 deploy mem REG 253,2 97140006 (deleted)/lib64/libpcre.so.0.0.1 (stat: No such file or directory)
nginx 1369 root mem REG 253,2 97140006 (deleted)/lib64/libpcre.so.0.0.1 (stat: No such file or directory)
mongod 26841 mongodb mem REG 253,2 1052673 /usr/lib64/libpcrecpp.so.0.0.0 (path dev=0,53)
mongod 26841 mongodb mem REG 253,2 97126735 /lib64/libpcre.so.0.0.1 (path dev=0,53)
grep 28590 deploy mem REG 253,2 97126735 /lib64/libpcre.so.0.0.1 (path dev=0,53)
注意mongod
用戶是如何加載/lib64/libpcre.so.0.0.1
。那一定是吧?
我跳躍到這個設定,在那裏我沒有上升級的MongoDB的合作伙伴/雙的生產箱證實了這一點又和運行相同lsof
命令,這是結果:
sudo lsof | grep pcre
nginx 922 root mem REG 253,2 81795343 (deleted)/lib64/libpcre.so.0.0.1 (stat: No such file or directory)
nginx 923 deploy mem REG 253,2 81795343 (deleted)/lib64/libpcre.so.0.0.1 (stat: No such file or directory)
nginx 924 deploy mem REG 253,2 81795343 (deleted)/lib64/libpcre.so.0.0.1 (stat: No such file or directory)
grep 8067 deploy mem REG 253,2 81791051 /lib64/libpcre.so.0.0.1 (path dev=0,61)
注意如何相比之下,有100%沒有mongod
loading /lib64/libpcre.so.0.0.1
的實例。所以這個問題的解決方案不是從源代碼重新編譯,因此處理無RPM安裝的麻煩,而只是從存儲庫安裝pcre
。