【发布时间】:2014-02-26 10:30:14
【问题描述】:
关于我构建的服务器的某些东西坏了(我不是唯一使用它的人......)。它是 SLES 11(无 SP)。我已经尝试卸载并重新安装 gcc、glibc 等,但没有成功。
问题是我构建的程序在遇到诸如 memset 或 strlen 之类的库函数时会出现段错误(请注意,这是调用此函数而不是函数本身,参数很好)。我认为它肯定是错误的,我可以证明它与 readelf 的不同。例如:
# readelf -s myprog | grep memset
247: 081461d0 52 <OS specific>: 10 GLOBAL DEFAULT 27 memset@GLIBC_2.0 (3)
3530: 081461d0 52 <OS specific>: 10 GLOBAL DEFAULT 27 memset@@GLIBC_2.0
与之前的工作版本相比:
69: 00000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.0 (2)
2035: 00000000 0 FUNC GLOBAL DEFAULT UND memset@@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 你有多确定这不是那个程序中的错误,即使它是一个非常简单的错误? (即向我们展示该测试程序,全部内容)。