论坛首页 编程语言技术论坛

编译Ruby时的奇怪错误 -- missing binary operator before token "(",及解决方法

浏览 12034 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-05-30   最后修改:2010-05-30

一些废话:

最近装了Ubuntu 10.04,当时图方便就用apt装了Ruby和Rails,觉得也还蛮方便的。今天装metric_fu这个gem时提示我rubygems的版本不够新,然后想升级时发现"gem update --system"不能用,apt提示我只能去找Debian的包……最后还是觉定重新编译安装Ruby,以后再也不偷懒了。

 

下载了Ruby 1.8.7,执行make命令时,发生了一个奇怪的错误:

 

math.c:37:13: error: missing binary operator before token "(" ...

 

遍寻google不得,都是只有提问没回答的……最后在一个似乎是聊天室记录的网页里发现有人说是elif的语法错误。抱着试一试的心情看了看Ruby源代码目录下的math.c,定位到37行,发现以下语句:

 

#elif define(ERANGE)

 

我这个不懂鸟语的当然看不懂这哪里有语法错误,不过还好上面几行还有一行相似的代码:

 

#if defined(ERANGE)

 

这句是没报错的,区别就在于elif那句define的后面少了一个 d ,试着把define改成defined,再次make,一切顺利!

   发表时间:2010-05-30   最后修改:2010-05-30
你要把原来的ruby和rails都删掉才行的。
whereis ruby && whereis rails
然后把相应目录下的都删掉。
然后再装。我记得以前曾经也出过类似的错误,编译通不过,就是这么解决的,没有改过源文件。
0 请登录后投票
   发表时间:2010-05-31  
我也试过全删掉,但还是报一样的错误,Google上有两种解决办法,好像都没人证实……一是说gcc 4.4太新了,要换旧点的gcc 4.3编译;另一种就是说math.c的代码有问题。
gcc那玩意依赖太多了,我不想搞出新的问题来,就试着看了看源码,结果网上那人说的一样……
0 请登录后投票
   发表时间:2010-06-01  
奇怪啊 我用刚更新的gcc 4.4.3跑了一遍 很顺利就下来了…… LZ如果对配置不熟 可以试一下用RVM 全程自动……
0 请登录后投票
   发表时间:2010-06-06   最后修改:2010-06-06
今天在台式机上又装了一遍Ruby,同样是Ubuntu 10.04,我在此处下的Ruby源码:
ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.gz
这是我以前安装Ruby on Rails环境时记下的源码下载地址。准备以后重装时用的。

编译出现了一样的问题,报math.o文件的语法错误,不过这次我手边还有一份从github上下的最新的Ruby源码。就对比了一下两者的math.o文件,发现确实是语法错误。对比如下:

github上的Ruby源码中的math.o文件:
#if defined(EDOM)
            errno = EDOM;
#elif defined(ERANGE)
            errno = ERANGE;
#endif


我用ftp下的Ruby源码中的math.o文件:
#if defined(EDOM)
	    errno = EDOM;
#elif define(ERANGE)
	    errno = ERANGE;
#endif


可以看到elif那一段的define确实有问题,虽然我不懂C……
0 请登录后投票
   发表时间:2010-06-06  
建议使用RVM模式安装,保留原有系统中的ruby。这样你就不会浪费注意力在ruby的编译上了。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics