(转自:http://blog.csdn.net/qq_28779503/article/details/54844988)

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

错误信息:

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

  1. /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所在路径:

  1. [root@localhost redis-3.2.7]# find / -name '*librt*'
  2. /lib/librt-2.12.so
  3. /lib/i686/nosegneg/librt-2.12.so
  4. /lib/i686/nosegneg/librt.so.1
  5. /lib/librt.so.1
  6. /lib/rtkaio/librtkaio-2.12.so
  7. /lib/rtkaio/i686/nosegneg/librtkaio-2.12.so
  8. /lib/rtkaio/i686/nosegneg/librt.so.1
  9. /lib/rtkaio/librt.so.1
  10. /usr/lib/librt.so
  11. /usr/lib/pulse-0.9.21/modules/librtp.so

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

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

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

  1. vim /home/wm/redis-3.2.7/Makefile

文件内容:

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

由注释可知:

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

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

  1. vim /home/wangmao/redis-3.2.7/src/Makefile

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

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

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

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

另:附上Linux常用的库

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

redis2.3.7安装时出现undefined reference to `clock_gettime'的更多相关文章

  1. undefined reference to `clock_gettime

    下面这个错误通常是因为链接选项里漏了-lrt,但有时发现即使加了-lrt仍出现这个问题,使用nm命令一直,会发现-lrt最终指向的文件没有包含任何symbol,这个时候,可以找相应的静态库版本libr ...

  2. [转] undefined reference to `clock_gettime'

    下面这个错误通常是因为链接选项里漏了-lrt,但有时发现即使加了-lrt仍出现这个问题,使用nm命令一直,会发现-lrt最终指向的文件 没有包含任何symbol,这个时候,可以找相应的静态库版本lib ...

  3. Linux嵌入式学习-Mplayer交叉编译-undefined reference to `clock_gettime' MPlayer

    編譯Mplayera. 配置.configure# ./configure --host-cc=gcc --cc=arm-linux-gcc --target=arm --enable-static ...

  4. [QT_FFMPEG]学习问题: 刚开始移植ffmpeg,测试时出现 undefined reference to `avcodec_configuration()'

    使用环境: window: win7 x64 QT: qt5.8.0 MinGW530 移植的教程: 流若浅  Qt ffmpeg环境搭建 : http://www.cnblogs.com/liuru ...

  5. CentOS安装libxml2报undefined reference to `gzopen64'

    主要是记录一下安装时候踩的坑 CentOS在make libxml2的时候,会报这个错误 ./.libs/libxml2.so: undefined reference to `gzopen64' c ...

  6. gcc链接程序时出现undefined reference to""错误

    如:: undefined reference to ‘mq_unlink',意思是指函数mq_unlink没有定义. 可以使用如下步骤找到该函数所在的库: 1).查找哪些库包含了或使用了该函数:gr ...

  7. 编译nginx时提示undefined reference to 'pcre_free_study' 的问题及解决

    ./configure --add-module=../ngx_devel_kit-0.2.19/ --add-module=../lua-nginx-module-0.9.19/  --with-l ...

  8. 解决ndk编译lua时遇到 undefined reference to '__srget'的问题

    今天用ndk r10d版本编译lua时,遇到几个错误,提示没有找到__srget 没有定义,于是看了国外的大神的解决方法, 是因为ndk在r10c之后的版本已经将getc函数屏蔽了,所以导致编译器找不 ...

  9. darknet-yolov3使用opencv3.4.8时,undefined reference 'imshow()'、'waitKey()'、'nameWindows()'

    解决办法:暴力卸载 卸载办法:进入到opencv3.4.8的安装目录下:make uninstall 然后重新安装了其他版本的,立马编译通过了.

随机推荐

  1. Sublime Text 3安装AngularJS插件

    Sublime Text 3是目前笔者用过的最好用的代码编辑器之一,界面如下图所示: 我们可以用该编辑器开发AngularJS应用,首先需要安装AngularJS提示插件. 需要以下几步: 1.安装P ...

  2. java代码(生成long类型数字)

    package test; public class GenerateNum { public static void main(String[] args) { //定义为long类型,需在数值后面 ...

  3. Javascript的一些经验总结

    JavaScript作用域 1.作用域 JavaScript的作用域与C.Java等语言不同,它不是以花括号包围的块级作用域,这个特性经常被大多数人忽视.例如下面代码,在大多数类C的语言中会出现变量未 ...

  4. JAVA 数据库编程中的性能优化

    1. 禁止自动提交:在默认情况下,程序执行的任何sql 语句都是自动提交的向一个表中插入2000条记录,自动提交所用的时间  11666毫秒禁止自动提交(显示提交) 3450毫秒 2. 批处理:多用批 ...

  5. jni log 使用

    1. 在源文件中添加头文件 #include <android/log.h> #define LOG_TAG "System.out.c" #define LOGD(. ...

  6. C03 程序逻辑

    程序逻辑 运算符 顺序结构 选择结构 循环结构 运算符 赋值运算符:= 比较运算符:>.<.==. >=.<=.!= 逻辑运算符:&&.||.! 顺序结构 在C ...

  7. php微信开发自动回复一直提示“该公众号提供的服务出现故障,请稍后再试”

    坑:服务器可以接受到发到公众号的信息,但是公众号不能回复,直接echo " ";exit();也会提示“该公众号提供的服务出现故障,请稍后再试”: 可能原因:用的php,是把数组转 ...

  8. word转HTML在layuiadmin中锚点调转问题

    前言: 在以前我们讲过把word转成HTML移植入自己的web项目使用:Word转html并移植到web项目 正文: 发现如果在layuiadmin框架中,页面里锚点跳转时会不正常(会跳转到新页面): ...

  9. ECMAScript 继承机制实现

    继承机制的实现 要用 ECMAScript 实现继承机制,您可以从要继承的基类入手.所有开发者定义的类都可作为基类.出于安全原因,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码 ...

  10. POJ-3050-Hoscotch

    这是一道简单的深搜题目,题意说的是给一个5*5的棋盘,里面填满数字,然后跳到一个格子上,这是第一步,接着向上下左右四个方向任意一个方向走一步,一共走6步,问我们走过的数字组成的一个6位数有多少种不同的 ...