Ruby在Leopard上的编译安装遇到的问题及解决办法

不想使用leopard上的ruby,所以就自己编译安装了,下面是安装及使用中遇到的几个问题

由于我已经把leopard上的有关ruby的目录删掉了,所以无法运行ruby,当然,编译的前提是要有xcode

这里用的是ruby网站上最新的包ruby 1.8.7 p72

问题1:

下载包,然后按照教程编译:
./configure --enable-shared --enable-pthread CFLAGS=-D_XOPEN_SOURCE=1

然后make,发现错误:
compiling readline
gcc -I. -I../.. -I../../. -I../.././ext/readline -DHAVE_READLINE_READLINE_H ...
... -D_XOPEN_SOURCE=1 -fno-common -pipe -fno-common -c readline.c
readline.c: In function ‘filename_completion_proc_call’:
readline.c:703: error: ‘filename_completion_function’ undeclared
(first use in this function)
readline.c:703: error: (Each undeclared identifier is reported only once
readline.c:703: error: for each function it appears in.)
readline.c:703: warning: assignment makes pointer from integer without a cast
readline.c: In function ‘username_completion_proc_call’:
readline.c:730: error: ‘username_completion_function’ undeclared
(first use in this function)
readline.c:730: warning: assignment makes pointer from integer without a cast
{standard input}:358:non-relocatable subtraction expression,
"_mReadline" minus "L00000000007$pb"
{standard input}:358:symbol: "_mReadline" can't be undefined in a
subtraction expression
...
{standard input}:249:non-relocatable subtraction expression, "_completion_proc"
minus "L00000000003$pb"
{standard input}:249:symbol: "_completion_proc" can't be undefined in a
subtraction expression
make[1]: *** [readline.o] Error 1
make: *** [all] Error 1

查找,得知需要先运行ruby src目录下的ext/extconf.rb,但是我之前已经把ruby给删掉了,所以无法运行这个文件 T_T
继续找,发现可以在configure后生成的config.h文件中加入宏定义来搞定这个问题
所以,直接编辑在ruby src目录下的config.h,在最末尾加入:
#define HAVE_RL_FILENAME_COMPLETION_FUNCTION 1
#define HAVE_RL_USERNAME_COMPLETION_FUNCTION 1
#define HAVE_RL_COMPLETION_MATCHES 1

这种错误,心里想肯定是因为某位帅哥点宏定义问题阿
加入后可以编译通过,屁颠屁颠装gem和rails去咯,想不到,这个解决方法还是有缺陷

问题2:
运行script/console出错,没这个咋个调试呢?不行!
一看,还是readline的问题,冤家路窄阿
错误:
Loading development environment (Rails 2.2.2)
/usr/local/lib/ruby/1.8/i686-darwin9.6.0/readline.bundle: dlopen(/usr/local/lib/ruby/1.8/i686-darwin9.6.0/readline.bundle, 9): Symbol not found: _rl_filename_completion_function (LoadError)
Referenced from: /usr/local/lib/ruby/1.8/i686-darwin9.6.0/readline.bundle
Expected in: flat namespace
- /usr/local/lib/ruby/1.8/i686-darwin9.6.0/readline.bundle
from /usr/local/lib/ruby/1.8/irb/completion.rb:10
from /usr/local/lib/ruby/1.8/irb/init.rb:252:in `require'
from /usr/local/lib/ruby/1.8/irb/init.rb:252:in `load_modules'
from /usr/local/lib/ruby/1.8/irb/init.rb:250:in `each'
from /usr/local/lib/ruby/1.8/irb/init.rb:250:in `load_modules'
from /usr/local/lib/ruby/1.8/irb/init.rb:21:in `setup'
from /usr/local/lib/ruby/1.8/irb.rb:54:in `start'
from /usr/local/bin/irb:13

思考一下,应该是bundle里头压根就没有这个_rl_filename_completion_function,没搞过mac开发,这东西莫非和dll差不多吗?应该查不多 XD

所以,决定重新编译ruby,把刚刚改过东西的ruby src删除掉,重新configure,然后这次老老实实的运行一下ext/extconf.rb,然后make,这次果然没有错误了.make install后发现script/console还是有错误.
无果,直接硬来,nnd
sudo cp readline.bundle /usr/local/lib/ruby/1.8/i686-darwin9.6.0/
替换后后问题得到解决.

误打误撞把奇怪的问题搞定了,有不足的地方希望指正
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值