CS:GO服務(wù)器啟動(dòng)時(shí)報(bào)錯(cuò)的處理(CentOS / Debian)
1 前言&目錄
1.1 前言
2023年2月csgo服務(wù)器更新后,csgo服務(wù)器時(shí)可能會(huì)因?yàn)閘inux系統(tǒng)缺少某些庫(kù)文件而啟動(dòng)失敗,我使用的是debian11系統(tǒng),解決這個(gè)問(wèn)題比較容易,但近兩天使用centos7搭建csgo服務(wù)器時(shí)卻發(fā)現(xiàn)這個(gè)問(wèn)題解決起來(lái)比較麻煩,因此分享一下處理過(guò)程
1.2 目錄
① Debian_11系統(tǒng),libstdc++.so.6相關(guān)報(bào)錯(cuò) ==> 本文第2章節(jié)
② CentOS_7系統(tǒng),CXXABI_1.3.8相關(guān)報(bào)錯(cuò) ==> 本文第3章節(jié)
③?CentOS_7系統(tǒng),GLIBC_2.18相關(guān)報(bào)錯(cuò) ==> 本文第4章節(jié)
④ 處理報(bào)錯(cuò)過(guò)程中學(xué)到的一些linux命令?==> 本文第5章節(jié)
2?Debian_11系統(tǒng),libstdc++.so.6相關(guān)報(bào)錯(cuò)
2.1 報(bào)錯(cuò)原因
啟動(dòng)csgo服務(wù)器時(shí),報(bào)錯(cuò):Failed to open libtier0.so (libstdc++.so.6: cannot open shared object file: No such file or directory)

根據(jù)提示,故障原因是找不到libstdc++.so.6庫(kù)文件,導(dǎo)致csgo服務(wù)器每10秒自動(dòng)重啟一次

注:截圖里寫(xiě)的libstdc++.so.6.0.28只是舉例,并不一定是這個(gè)版本
2.2 解決方法
缺什么補(bǔ)什么,安裝lib32stdc++6就可以了
安裝命令:sudo apt install lib32stdc++6 -y
3?CentOS_7系統(tǒng),CXXABI_1.3.8相關(guān)報(bào)錯(cuò)
3.1 報(bào)錯(cuò)原因
啟動(dòng)csgo服務(wù)器時(shí),報(bào)錯(cuò):Failed to open libtier0.so (/lib/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/aaa/Steam/csgo-ds/bin/libtier0.so))

根據(jù)提示,故障原因是libstdc++.so.6中缺少了CXXABI_1.3.8,導(dǎo)致csgo服務(wù)器每10秒自動(dòng)重啟一次
因?yàn)閺膕team下載的csgo服務(wù)器文件自帶的libstdc++.so.6軟鏈接(類(lèi)似于windows系統(tǒng)的快捷方式)指向真實(shí)文件libstdc++.so.6.0.19,它的版本太低了不包含CXXABI_1.3.8
3.2 解決方法
將libstdc++.so.6.0.19替換為包含CXXABI_1.3.8的更高版本即可,我這里從另一個(gè)debian系統(tǒng)里提取出libstdc++.so.6.0.28就能滿足要求,同時(shí)還要修改對(duì)應(yīng)的軟鏈接,步驟如下:
① 將滿足要求的新版本庫(kù)文件(例如libstdc++.so.6.0.28)放到CentOS系統(tǒng)的 /usr/lib 路徑下
② 打開(kāi)libstdc++.so.6所在路徑,命令:cd /usr/lib
③ 刪除舊的軟鏈接,命令:rm libstdc++.so.6
④ 創(chuàng)建新的軟鏈接,命令:ln -s libstdc++.so.6.0.28 libstdc++.so.6
⑤ 嘗試啟動(dòng)csgo服務(wù)器,此時(shí)可能會(huì)出現(xiàn)兩種情況
情況一:csgo服務(wù)器正常啟動(dòng),問(wèn)題解決。但絕大多數(shù)是出現(xiàn)第二種情況 (?﹏?)
情況二:csgo服務(wù)器啟動(dòng)時(shí)又報(bào)另一個(gè)錯(cuò)誤:Failed to open libtier0.so (/lib/libc.so.6: version `GLIBC_2.18' not found (required by /lib/libstdc++.so.6))。這種情況下,建議再次按上述③④步驟,將libstdc++.so.6軟鏈接指向舊版本libstdc++.so.6.0.19(即還原成最初的報(bào)錯(cuò)),接下來(lái)按照本文第4章節(jié)進(jìn)行操作
4?CentOS_7系統(tǒng),GLIBC_2.18相關(guān)報(bào)錯(cuò)
4.1 報(bào)錯(cuò)原因
啟動(dòng)csgo服務(wù)器時(shí),報(bào)錯(cuò):Failed to open libtier0.so (/lib/libc.so.6: version `GLIBC_2.18' not found (required by /lib/libstdc++.so.6))

根據(jù)提示,故障原因是libc.so.6庫(kù)中缺少了GLIBC_2.18,導(dǎo)致的csgo服務(wù)器每10秒自動(dòng)重啟一次
因?yàn)閺膕team下載的csgo服務(wù)器文件自帶的libc.so.6軟鏈接(類(lèi)似于windows系統(tǒng)的快捷方式)指向真實(shí)文件libc-2.17.so,它的版本太低了不包含GLIBC_2.18
4.2 解決辦法
將libc-2.17.so替換為包含GLIBC_2.18的更高版本,實(shí)測(cè)2.18及以上版本即可滿足要求。接下來(lái)有兩種解決方式:
方式一:從其他途徑獲取并安裝libc-2.18.so或它的更高版本,同時(shí)修改libc.so.6軟鏈接,步驟如下:
① 將滿足要求的新版本libc-2.18.so放到CentOS系統(tǒng)的?/usr/lib?路徑下
② 打開(kāi)libc.so.6所在路徑,命令:cd /usr/lib
③?刪除舊的軟鏈接,命令:rm?libc.so.6
④?創(chuàng)建新的軟鏈接,命令:ln -s libc-2.18.so libc.so.6
⑤ 嘗試啟動(dòng)csgo服務(wù)器,此時(shí)可能會(huì)出現(xiàn)兩種情況
情況一:csgo服務(wù)器正常啟動(dòng),問(wèn)題解決。但也可能是第二種情況?(?﹏?)
情況二:csgo服務(wù)器啟動(dòng)時(shí)又報(bào)另一個(gè)錯(cuò)誤(見(jiàn)下圖):./srcds_linux: relocation error: /lib/libpthread.so.0: symbol __h_errno, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference。這種情況下,建議再次按上述③④步驟,將libc.so.6軟鏈接指向舊版本libc-2.17.so(即還原成最初的報(bào)錯(cuò)),接下來(lái)按照方式二的步驟進(jìn)行操作

方式二:下載glibc-2.18源碼,然后手動(dòng)編譯并安裝libc-2.18.so,步驟如下:
① 使用root管理員賬戶登錄CentOS(或者切換到root賬戶,命令:su root)
然后打開(kāi)root目錄,命令:cd /root
② 下載glibc-2.18源碼,命令:wget https://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
③ 解壓glibc-2.18源碼,命令:tar xvf?glibc-2.18.tar.gz
④ 進(jìn)入解壓后的文件夾,命令:cd glibc-2.18
⑤ 創(chuàng)建并進(jìn)入build文件夾,命令:mkdir build && cd build
⑥ 運(yùn)行命令:../configure --prefix=/usr --host=i686-linux-gnu --build=i686-linux-gnu? CC="gcc -m32" CXX="g++ -m32" CFLAGS="-O2 -march=i686" CXXFLAGS="-O2 -march=i686"
注:
如編譯過(guò)程中報(bào)錯(cuò),請(qǐng)見(jiàn)本文4.3章節(jié)
關(guān)于此命令的解釋請(qǐng)參考文章:https://www.codenong.com/8004241/
⑦ 開(kāi)始編譯,命令:make -j4
注:
如編譯過(guò)程中報(bào)錯(cuò),請(qǐng)見(jiàn)本文4.3章節(jié)
關(guān)于此命令的解釋請(qǐng)參考文章:https://blog.csdn.net/a_little_a_day/article/details/78251928
⑧ 安裝:make install

⑨?嘗試啟動(dòng)csgo服務(wù)器,此時(shí)可能會(huì)出現(xiàn)兩種情況
情況一:csgo服務(wù)器正常啟動(dòng),問(wèn)題解決。但也可能是第二種情況?(?﹏?)
情況二:仍然報(bào)錯(cuò):Failed to open libtier0.so (/lib/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/aaa/Steam/csgo-ds/bin/libtier0.so))。需要檢查libc.so.6軟鏈接是否指向libc-2.18.so,libstdc++.so.6軟鏈接可能還是指向舊版本的libstdc++.so.6.0.19,此時(shí)需要按本文3.2章節(jié)提供的方式用新版本的庫(kù)替換libstdc++.so.6.0.19,同時(shí)重新創(chuàng)建libstdc++.so.6軟鏈接
4.3 編譯過(guò)程中的報(bào)錯(cuò)處理
4.3.1 編譯步驟⑥報(bào)錯(cuò)

解決辦法:安裝gcc和gcc-c++,命令:yum install gcc gcc-c++ -y
然后重新進(jìn)行編譯步驟⑥
4.3.2 編譯步驟⑦報(bào)錯(cuò)
報(bào)錯(cuò)信息:/usr/include/gnu/stubs.h:7:27: 致命錯(cuò)誤:gnu/stubs-32.h:沒(méi)有那個(gè)文件或目錄
或者報(bào)錯(cuò):/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or direct

解決辦法:安裝glibc-devel.i686,命令:yum install glibc-devel.i686 -y
然后重新進(jìn)行編譯步驟⑦
5 一些可能用到的linux命令
5.1 查看軟鏈接
命令:ll????或? ls -il

5.2 查看libstdc++.so.6中包含的所有CXXABI相關(guān)的文件
命令:strings /usr/lib/libstdc++.so.6|grep CXXABI

5.3?查看libc.so.6中包含的所有GLIBC相關(guān)的文件
命令:strings /usr/lib/libstdc++.so.6|grep GLIBC
5.4 查找CentOS中所有的libstdc++.so.6文件
命令:find / -name 'libstdc++.so.6'
命令格式:find [搜索范圍] [搜索條件]
注:配合本文5.2章節(jié)的命令使用,可用于查找CentOS中是否有滿足要求的libstdc++.so.6文件
5.5 從yum源查找所需庫(kù)文件
① 先加載所有安裝包,命令:yum repolist
② 查找哪個(gè)安裝包可提供libstdc++.so.6,命令:yum?provides libstdc++.so.6
6 總結(jié)
還是Debian系統(tǒng)好啊~~ 一條命令就能解決的事,放在CentOS里巴拉巴拉說(shuō)了一堆,還不一定能順利解決!