解决*** No rule to make target `/include/ruby.h' 报错

最近搭建redis集群,本来觉得,这个事情么,一个小时足够了。结果人算不如天算,踩坑了。

事件回顾

redis基础配置及服务起来以后,需要安装ruby 与 rubygem,方可使用redis集群。安装ruby 也简单,去官网(https://www.ruby-lang.org/zh_cn/downloads/ )下载即可。然后,解压,进入解压目录中,正常来说,只要三个命令即可:

./configure
make
make install
拦路虎1

当然也可以指定下安装路径./configure --PREFIX=/usr/local/xxx,这一过程很顺利。
执行make的时候,出现如下报错:

make[2]: Leaving directory `/usr/local/redis/ruby/ruby-2.6.3/ext/fiber'
make[2]: Entering directory `/usr/local/redis/ruby/ruby-2.6.3/ext/zlib'
make[2]: *** No rule to make target `/include/ruby.h', needed by `zlib.o'.  Stop.
make[2]: Leaving directory `/usr/local/redis/ruby/ruby-2.6.3/ext/zlib'
make[1]: *** [ext/zlib/all] Error 2
make[1]: Leaving directory `/usr/local/redis/ruby/ruby-2.6.3'
make: *** [build-ext] Error 2

大概说是,找不到/include/ruby.h'这个文件。
解决方法是:

[root@localhost ruby-2.6.3]# cd /usr/local/redis/ruby/ruby-2.6.3/ext/zlib
[root@localhost zlib]# ls
depend  extconf.rb  exts.mk  Makefile  mkmf.log  zlib.c  zlib.gemspec
[root@localhost zlib]# ruby extconf.rb 
checking for deflateReset() in -lz... yes
checking for zlib.h... yes
checking for crc32_combine() in zlib.h... yes
checking for adler32_combine() in zlib.h... yes
checking for z_crc_t in zlib.h... yes
creating Makefile

看起来没啥问题,继续执行

[root@localhost zlib]# make
make: *** No rule to make target `/include/ruby.h', needed by `zlib.o'.  Stop.

哦,报错了,先来看看哪里报错了?

# AUTOGENERATED DEPENDENCIES START
zlib.o: $(RUBY_EXTCONF_H)
zlib.o: $(arch_hdrdir)/ruby/config.h
zlib.o: $(hdrdir)/ruby/backward.h
zlib.o: $(hdrdir)/ruby/defines.h
zlib.o: $(hdrdir)/ruby/encoding.h
zlib.o: $(hdrdir)/ruby/intern.h
zlib.o: $(hdrdir)/ruby/io.h
zlib.o: $(hdrdir)/ruby/missing.h
zlib.o: $(hdrdir)/ruby/onigmo.h
zlib.o: $(hdrdir)/ruby/oniguruma.h
zlib.o: $(hdrdir)/ruby/ruby.h
zlib.o: $(hdrdir)/ruby/st.h
zlib.o: $(hdrdir)/ruby/subst.h
zlib.o: $(hdrdir)/ruby/thread.h
zlib.o: $(top_srcdir)/include/ruby.h            <----------------- 问题在这里
zlib.o: zlib.c
# AUTOGENERATED DEPENDENCIES END

让我们再来看看报错信息:make: *** No rule to make target/include/ruby.h’, needed by zlib.o'. Stop.。它提示在/include/ruby.h这个路径下的文件不存在,确认了一下的确不存在。但是配置项中明明有变量$(top_srcdir),难道是变量没有设置?或者说设置了为空的变量?
此处有两种解决方法:
1、在Makefile文档最前面,设置变量top_srcdir的路径
2、用绝对/相对路径替换$(top_srcdir)该变量
来一个简单粗暴点的方法吧:
使用 vim Makefile(因为要大批量改动,建议先备份: cp Makefile Makefile-date +%F)编辑文件,而后替换所有$(top_srcdir),输入:

: %s/$(top_srcdir)/..\/../g

替换后,保存,退出编辑,执行

make

一切正常,执行

make install

一切正常。

拦路虎2

接下去执行命令:

[root@localhost ruby-2.6.3]# gem install redis
Traceback (most recent call last):
	33: from /usr/local/bin/gem:21:in `<main>'
	32: from /usr/local/lib/ruby/2.6.0/rubygems/gem_runner.rb:59:in `run'
	31: from /usr/local/lib/ruby/2.6.0/rubygems/command_manager.rb:148:in `run'
	30: from /usr/local/lib/ruby/2.6.0/rubygems/command_manager.rb:178:in `process_args'
										.......
										.......
										.......
	 7: from /usr/local/lib/ruby/2.6.0/rubygems/request/http_pool.rb:39:in `make_connection'
	 6: from /usr/local/lib/ruby/2.6.0/rubygems/request/https_pool.rb:6:in `setup_connection'
	 5: from /usr/local/lib/ruby/2.6.0/rubygems/request.rb:48:in `configure_connection_for_https'
	 4: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 3: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 2: from /usr/local/lib/ruby/2.6.0/net/https.rb:23:in `<top (required)>'
	 1: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- openssl (LoadError)

如上报错,如果没装该库,需先安装:

yum -y install openssl-delvel

接着处理方式就和上述有些类似了:

cd /usr/local/redis/ruby/ruby-2.6.3/ext/openssl
ruby extconf.rb
make
make install

若顺利的话,问题即处理完毕:

[root@localhost openssl]# gem install redis
Fetching redis-4.1.1.gem
Successfully installed redis-4.1.1
Parsing documentation for redis-4.1.1
Installing ri documentation for redis-4.1.1
Done installing documentation for redis after 0 seconds
1 gem installed

安装可以正常执行。
若出现类似上述找不到/include/ruby.h'这个文件,按照上述处理即可。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值