有關我構建的服務器有問題(我不是唯一使用它的服務器......)。它是SLES 11(不是SP)。我試圖卸載並重新安裝gcc,glibc等沒有成功。Glibc鏈接差異導致分段錯誤
問題是我的內置程序只要碰到一個庫函數(比如memset或strlen)就會發生seg-fault(注意它是調用這個函數而不是函數本身,參數很好)。我認爲這肯定是連接錯誤,我可以證明它與readelf是不同的。例如:
# readelf -s myprog | grep memset
247: 081461d0 52 <OS specific>: 10 GLOBAL DEFAULT 27 [email protected]_2.0 (3)
3530: 081461d0 52 <OS specific>: 10 GLOBAL DEFAULT 27 [email protected]@GLIBC_2.0
VS以前的工作版本,上面寫着:
69: 00000000 0 FUNC GLOBAL DEFAULT UND [email protected]_2.0 (2)
2035: 00000000 0 FUNC GLOBAL DEFAULT UND [email protected]@GLIBC_2.0
它是一個相當標準的makefile並沒有什麼改變。鏈接器標誌是:
LDFLAGS = -L$(companylibrarypath) -lourcompanylibrary -L$(mysql_lib_path) -lmysqlclient -L/usr/tls/ -lpthread -pthread -lz -L$(curl_lib_path) -lcurl -lxslt
嘗試從頭開始重建,可能是舊的對象文件... –
我試過了。還創建了新的程序,只有printf和memset,memset有同樣的問題... – user3194963
@ user3194963你有多確定它不是該程序中的錯誤,即使它是一個非常簡單的程序? (即向我們展示那個測試程序,它的全部)。 – nos