在Fedora 15上安装ruby-1.8.7时出错

问题描述

| 使用RVM,我在安装Fedora 15之后尝试安装ree-1.8.7-2011.03,但出现以下错误。在Ubuntu 11.04上使用
rvm install ree-1.8.7-2011.03
可以正常工作.. 与Fedora 15上的MRI ruby​​-1.8.7-p334相同的错误(和解决方案) 关于如何解决此问题的任何想法?
make[1]: Entering directory `/home/ryguy/.rvm/src/ree-1.8.7-2011.03/source/ext/dl\'
gcc -I/Opt/local/include -I. -I/Opt/local/include -I../.. -I../../. -I../.././ext/dl -DHAVE_DLFCN_H -DHAVE_DLOPEN -DHAVE_DLCLOSE -DHAVE_DLSYM -DHAVE_DLERROR    -I. -fPIC -g -O2   -fno-defer-pop -fno-omit-frame-pointer  -c ptr.c
gcc -I/Opt/local/include -I. -I/Opt/local/include -I../.. -I../../. -I../.././ext/dl -DHAVE_DLFCN_H -DHAVE_DLOPEN -DHAVE_DLCLOSE -DHAVE_DLSYM -DHAVE_DLERROR    -I. -fPIC -g -O2   -fno-defer-pop -fno-omit-frame-pointer  -c handle.c
Generating callback.func
Generating cbtable.func
gcc -I/Opt/local/include -I. -I/Opt/local/include -I../.. -I../../. -I../.././ext/dl -DHAVE_DLFCN_H -DHAVE_DLOPEN -DHAVE_DLCLOSE -DHAVE_DLSYM -DHAVE_DLERROR    -I. -fPIC -g -O2   -fno-defer-pop -fno-omit-frame-pointer  -c dl.c
In file included from dl.c:104:0:
callback.func:1:1: warning: data deFinition has no type or storage class [enabled by default]
callback.func:1:7: error: expected identifier or ‘(’ before ‘long’
In file included from dl.c:104:0:
callback.func:78:33: error: expected ‘)’ before ‘(’ token
callback.func:79:3: warning: data deFinition has no type or storage class [enabled by default]
callback.func:79:24: error: ‘proc’ undeclared here (not in a function)
callback.func:79:39: error: ‘argc’ undeclared here (not in a function)
callback.func:79:45: error: ‘argv’ undeclared here (not in a function)
callback.func:82:1: error: expected identifier or ‘(’ before ‘}’ token
dl.c:106:1: error: expected ‘;’,‘,’ or ‘)’ before ‘static’
make[1]: *** [dl.o] Error 1
make[1]: Leaving directory `/home/ryguy/.rvm/src/ree-1.8.7-2011.03/source/ext/dl\'
make: *** [all] Error 1
    

解决方法

在Fedora 15中使用rvm安装ruby-1.8.7时也会发生这种情况。 Reinier Balt的答案也适用,在我的情况下,我必须使用yum安装系统范围的红宝石。 这是我所做的:
cd ~/.rvm/src/ruby-1.8.7-p334/ext/dl
ruby mkcallback.rb > callback.func
ruby mkcbtable.rb > cbtable.func
    ,我也看到了 我进入src / ext / dl目录,并手动生成了不完整的callback.func和cbtable.func。我必须做
rm callback.func
touch callback.func
ruby mkcallback.rb >> callback.func
(对cbtable重复) 不知何故,简单的红宝石ѭ4work无法正常工作 然后重新运行
rvm install 1.8.7
,它将不会覆盖您的更改。     ,https://bugs.ruby-lang.org/issues/5108 [[tl; dr:请参阅底部的补丁]]     ,我不知道为什么会发生这种情况,但似乎重定向到文件并没有完全重定向输出。作为一个临时的hack / fix,它确实可以正常工作,您可以通过tee将其通过管道传输。它可以完成工作,但肯定不是正确的解决方案。 补丁: https://gist.github.com/1083163 如下所示应用此补丁:
rvm install --patch /path/to/Fedora-15-ruby-1.8.7-p352.patch%0 ruby-1.8.7
将起作用。我还将使用ree测试它并进行更新。 编辑:此相同的修补程序也适用于ree。
rvm install --patch /path/to/Fedora-15-ruby-1.8.76-p352.patch%0 ree
为我成功安装了一个工作炉。     ,RVM中现在提供了user865548的修补程序(将为
1.9.1
或仅为
rvm get head
)