CentOS 6.3 x64,編譯安裝 pacemaker 1.1.15 rpm 包後,服務啟動失敗:
[root@srdsdevapp73 ~]# service pacemaker start Starting Pacemaker Cluster Manager [FAILED]
[root@srdsdevapp73 ~]# strace -f service pacemaker start
...
[pid 19960] writev(2, [{"pacemakerd", 10}, {": ", 2},
{"error while loading shared libra", 36}, {": ", 2},
{"libcoroipcc.so.4", 16}, {": ", 2},
{"cannot open shared object file", 30}, ...
]
明確報錯:libcoroipcc.so.4 找不到。
[root@srdsdevapp73 ~]# ldd /usr/sbin/pacemakerd ... libcoroipcc.so.4 => not found libcfg.so.4 => not found libconfdb.so.4 => not found ...
共 3 個庫缺失。同時發現異常路徑:
libcrmcluster.so.4 => /usr/lib/libcrmcluster.so.4 (異常:應為 /usr/lib64/)
/usr/lib/(32 位庫目錄)。/usr/lib64/(64 位庫目錄)。/lib → /usr/lib → /lib64 → /usr/lib64。/usr/lib/libcrmcluster.so.4 被優先找到,但它依賴的 libcoroipcc.so.4 等庫不在 /usr/lib/,導致連帶缺失。# 刪除殘留的 32 位舊庫 [root@srdsdevapp73 ~]# rm -f /usr/lib/libcrm* [root@srdsdevapp73 ~]# rm -f /usr/lib/libstonithd.* # 再次驗證 [root@srdsdevapp73 ~]# ldd /usr/sbin/pacemakerd linux-vdso.so.1 => (0x00007fff9a3ff000) libcrmcluster.so.4 => /usr/lib64/libcrmcluster.so.4 (0x00007f849a1fc000) libstonithd.so.2 => /usr/lib64/libstonithd.so.2 (0x00007f8499fea000) ... 所有庫均正確指向 /usr/lib64/ 或系統路徑 # 啟動服務 [root@srdsdevapp73 ~]# service pacemaker start Starting Pacemaker Cluster Manager [ OK ]
當 /etc/ld.so.conf 未額外配置,且未設置 LD_LIBRARY_PATH 時,運行時鏈接器 (ld-linux.so) 默認搜索順序:
/lib/usr/lib/lib64/usr/lib64關鍵機制:
ldconfig 掃描上述目錄生成 /etc/ld.so.cache,運行時直接讀取緩存加速。RPATH/RUNPATH (編譯時嵌入)、LD_LIBRARY_PATH (環境變量) 優先級高於默認路徑。yum remove *.i686 或手動清理 /usr/lib/ 下非系統必要庫。%{_libdir} 宏自動展開為 /usr/lib64,避免硬編碼 /usr/lib。find /usr/lib -name "libcrm*" -o -name "libstonithd*"。ldd <binary> | grep "not found" 自動化檢測。動態鏈接庫加載失敗多因目錄殘留舊版庫搶佔搜索優先級。掌握 strace 定位缺失、ldd 全依賴檢查、ldconfig 緩存機制、搜索順序優先級,能快速定位並徹底解決此類「找不到庫」故障。