0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ruby 3 を古い gcc でコンパイルしたい

Posted at

rbenv をつかって ruby を管理しており、v3(v3.1.3~、v3.2.0~)をインストールしたところ以下のようなエラーが出て困っている人向けの記事です。

compiling miniinit.c
In file included from vm_core.h:164:0,
                 from iseq.h:14,
                 from mini_builtin.c:3,
                 from miniinit.c:51:
thread_pthread.h:109:39: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'struct'
 RUBY_EXTERN RB_THREAD_LOCAL_SPECIFIER struct rb_execution_context_struct *ruby_current_ec;
                                       ^
In file included from iseq.h:14:0,
                 from mini_builtin.c:3,
                 from miniinit.c:51:
vm_core.h: In function 'rb_current_execution_context':
vm_core.h:1865:34: error: 'ruby_current_ec' undeclared (first use in this function)
     rb_execution_context_t *ec = ruby_current_ec;
                                  ^
vm_core.h:1865:34: note: each undeclared identifier is reported only once for each function it appears in
miniinit.c: At top level:
cc1: warning: unrecognized command line option "-Wno-tautological-compare" [enabled by default]
cc1: warning: unrecognized command line option "-Wno-self-assign" [enabled by default]
cc1: warning: unrecognized command line option "-Wno-parentheses-equality" [enabled by default]
cc1: warning: unrecognized command line option "-Wno-constant-logical-operand" [enabled by default]
cc1: warning: unrecognized command line option "-Wno-cast-function-type" [enabled by default]
make: *** [miniinit.o] Error 1

gcc を新しいものにすれば解決するようですが、環境がそれをゆるさらない人もいるかもしれません(わたしがそうでした、許されないってほど強いものではないですが…)

https://github.com/overleo/ruby322patch
ここにパッチを用意したのでこれを使ってインストールすれば解決するはず。

rbenv install --patch 3.2.2 < ruby32_bugfix.patch

あとはどうやってこのパッチを作ったか、です。

なぜコンパイル時にエラーが出るのか

https://ml.ruby-lang.org/mailman3/hyperkitty/list/ruby-core@ml.ruby-lang.org/thread/Q4Y44DVL3FIBNZ3WFIACLED46C75LXPU/
こちらにバグレポートが上がっていますが、autoconf が -std=gnu11 を追加し、古い gcc では通らなくなるようです。

3.2.x ではこの対処のための変更が追加されているようにも見えますがなぜか同様のエラーでコンパイルできない…。

Ruby 3.3.0-preview1 をためしてみた

コンパイルが通る。
つかり 3.3.0-preview1 までの変更でなにかが変わったはず…。ということでそのコミットを頑張って探しました。

該当コミットをパッチにする

https://github.com/ruby/ruby/commit/96d1acfdf6c6b42f2029f44d5b5920961d6efa92
これです。

git format-patch -1 f99af43

該当コミットをパッチ形式にして github にあげたものが、この手順で作成したものです。

以上。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?