undefined reference to `clock_gettime' 链接错误的解决思路

错误信息:

centos下安装redis时报错,报错内容为:

/home/wm/redis-3.2.7/deps/jemalloc/src/nstime.c:120: undefined reference to `clock_gettime'

发现是在链接的时候出错。经过查找发现clock_gettime在实时库librt(real time)里面,由于链接的时候没有链接这个库导致报错。


解决思路:

只需在我们运行的Makefile文件里面添加动态链接库librt ( -lrt )  ,重新编译即可。


解决方案:

1.查找实时库librt所在路径:

[root@localhost redis-3.2.7]# find / -name '*librt*'
/lib/librt-2.12.so
/lib/i686/nosegneg/librt-2.12.so
/lib/i686/nosegneg/librt.so.1
/lib/librt.so.1
/lib/rtkaio/librtkaio-2.12.so
/lib/rtkaio/i686/nosegneg/librtkaio-2.12.so
/lib/rtkaio/i686/nosegneg/librt.so.1
/lib/rtkaio/librt.so.1
/usr/lib/librt.so
/usr/lib/pulse-0.9.21/modules/librtp.so


2.推测可知:librt.so为linkname,librt.so.1为soname,librt-2.12.so为realname

[root@localhost redis-3.2.7]# ls -l /usr/lib/ |grep 'librt.so'
lrwxrwxrwx.  1 root root       20 7月  18 2016 librt.so -> ../../lib/librt.so.1
[root@localhost redis-3.2.7]# ls -l /lib/ |grep 'librt.so.1'
lrwxrwxrwx.  1 root root      13 7月  13 2016 librt.so.1 -> librt-2.12.so



3.打开/home/wm/redis-3.2.7路径下的Makefile文件:

vim /home/wm/redis-3.2.7/Makefile
文件内容:

  1 # Top level makefile, the real shit is at src/Makefile
  2
  3 default: all
  4
  5 .DEFAULT:
  6     cd src && $(MAKE) $@
  7
  8 install:
  9     cd src && $(MAKE) $@
 10
 11 .PHONY: install

由注释可知:

这个Makefile是顶级的Makefile文件,真正的Makefile文件在src/ makefile路径下


4.打开/home/wm/redis-3.2.7/src/路径下的Makefile文件:

vim /home/wm/redis-3.2.7/src/Makefile


从错误信息可知,该错误是编译/home/wm/redis-3.2.7/deps/jemalloc/src/nstime.c文件中的clock_gettime函数时未找到相应的动态链接库而发生的错误。

阅读Makefile文件后可推测应与jemalloc文件夹相关,所以:

105 ifeq ($(MALLOC),jemalloc)
106     DEPENDENCY_TARGETS+= jemalloc
107     FINAL_CFLAGS+= -DUSE_JEMALLOC -I../deps/jemalloc/include
108     FINAL_LIBS+= ../deps/jemalloc/lib/libjemalloc.a
109     FINAL_LIBS+= /usr/lib/librt.so  #此路径加上librt.so
110 endif



5.保存Makefile文件后,重新执行Make命令即可成功编译。


另:附上Linux常用的库

libz     压缩库(Z)
librt     实时库(real time)
libm    数学库(math)
libc     标准C库(C lib)


  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值