1
0

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.

EV3rtで "no implicit conversion of Hash into String (TypeError)" となるエラーの対処法 (rubyのバージョンの変更)

Last updated at Posted at 2023-08-31

はじめに

初めに、本記事のタイトルが@freegod(とり 火鳥)様のev3rtでno implicit conversion of Hash into String (TypeError)と出た時の備忘録という記事と似ていることをお知らせいたします。

本記事では、上記の記事とは異なるアプローチで、当該エラーを解決するものになります。
(私の環境下では、上記の記事の方法では解決しませんでした…)

条件

  • 実施日: 2023年8月
  • 実行環境: Windows 10 および 11上のWSL2
  • EV3rtのバージョン: 1.1

環境構築は、私の以前の記事#2 Windows(WSL)版開発環境構築【後輩たちのためのEV3rt講座(改)】に沿って行われたものとします。

症状

TOPPERSのEV3rtにて、アプリケーションのコンパイルをmake app=アプリケーション名により実行したところ、以下のようなエラーが発生します。

Ubuntu
XXXX@XXXX:/mnt/c/workspace/ev3rt/hrp3/sdk/workspace$ make app=helloev3
rm -rf /mnt/c/workspace/ev3rt/hrp3/sdk/workspace/.././OBJ/
Generating Makefile from ../common/Makefile.app.
make[1]: Entering directory '/mnt/c/workspace/ev3rt/hrp3/sdk/OBJ'
rm -f cfg1_out cfg1_out.o cfg1_out.c cfg1_out.syms cfg1_out.srec module_cfg.h module_cfg.c \#* *~ *.o
make[1]: Leaving directory '/mnt/c/workspace/ev3rt/hrp3/sdk/OBJ'
make[1]: Entering directory '/mnt/c/workspace/ev3rt/hrp3/sdk/OBJ'
  CFG[1]  module_cfg.h
/usr/lib/ruby/3.0.0/csv.rb:1421:in `initialize': no implicit conversion of Hash into String (TypeError)
        from /usr/lib/ruby/3.0.0/csv.rb:1421:in `open'
        from /usr/lib/ruby/3.0.0/csv.rb:1421:in `open'
        from /mnt/c/workspace/ev3rt/hrp3/cfg/pass1.rb:178:in `block in ReadSymvalTable'
        from /mnt/c/workspace/ev3rt/hrp3/cfg/pass1.rb:172:in `each'
        from /mnt/c/workspace/ev3rt/hrp3/cfg/pass1.rb:172:in `ReadSymvalTable'
        from /mnt/c/workspace/ev3rt/hrp3/cfg/pass1.rb:902:in `Pass1'
        from ../../cfg/cfg.rb:705:in `<main>'
make[1]: *** [../../target/ev3_gcc/dmloader/app/Makefile.lum:52: module_cfg.h] Error 1
make[1]: Leaving directory '/mnt/c/workspace/ev3rt/hrp3/sdk/OBJ'
make: *** [../common/Makefile.workspace:97: app] Error 2

エラーの発生個所を見ると

Ubuntu
/usr/lib/ruby/3.0.0/csv.rb:1421:in `initialize': no implicit conversion of Hash into String (TypeError)

となっており、当該ファイルを確認したところ、1421行目のopenという関数が悪さをしているようです。

結論

結論としては、rubyのバージョンが3.0系になっていることが原因と考えられます。

以下のコマンドにより、現在インストールされているrubyのバージョンが確認出来ます。

Ubuntu
XXXX@XXXX:~$ ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu]

このように、ruby 3.0.2がインストールされていることが確認できます。

よって、以下の手順によりrubyのバージョンを2.7系にダウングレードします。

解決方法

ruby の削除

初めに、現時点でインストールされているrubyをアンインストールします。

Ubuntu
XXXX@XXXX:~$ sudo apt purge ruby

これにより、先ほどのバージョン確認コマンドを入力しても、バージョンが出力されないはずです。

Ubuntu
XXXX@XXXX:~$ ruby -v
Command 'ruby' not found, but can be installed with:
sudo snap install ruby  # version 3.2.2, or
sudo apt  install ruby  # version 1:3.0~exp1
See 'snap info ruby' for additional versions.

ruby 2.7系のインストール

こちらの記事を参考にruby 2.7をインストールしていきます。

Ubuntu 22.04系にRuby2.7をインストール

依存関係のインストール

Ubuntu
$ sudo apt install git build-essential checkinstall zlib1g-dev

rbenvのインストール

Ubuntu
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv

rbenvのパスを通す

Ubuntu
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc

$ source ~/.bashrc

ruby-buildのインストール

Ubuntu
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

OpenSSL 1.1.1のインストール

Ubuntu
$ cd
$ wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz
$ tar xf openssl-1.1.1q.tar.gz

$ cd openssl-1.1.1q
$ ./config --prefix=/opt/openssl-1.1.1q --openssldir=/opt/openssl-1.1.1q shared zlib
$ make
$ make test
$ sudo make install

シンボリックリンクを張り替える

Ubuntu
$ sudo rm -rf /opt/openssl-1.1.1q/certs
$ sudo ln -s /etc/ssl/certs /opt/openssl-1.1.1q

ruby 2.7.6をインストール

Ubuntu
$ RUBY_CONFIGURE_OPTS=--with-openssl-dir=/opt/openssl-1.1.1q
$ RUBY_CONFIGURE_OPTS=--with-openssl-dir=/opt/openssl-1.1.1q rbenv install 2.7.6

$ rbenv global 2.7.6

インストールされていることを確認

Ubuntu
$ ruby -v
ruby 2.7.6p219 (2022-04-12 revision c9c2245c0a) [x86_64-linux]

パスを通す

初めに、rubyの場所を確認します。

Ubuntu
$ which ruby
/home/user/.rbenv/shims/ruby

出力された/home/user/.rbenv/shims/rubyをコピーします。

次に、以下の操作により、パスを通します。

Ubuntu
$ sudo su -
$ echo "export PATH=$PATH:/home/user1/.rbenv/shims" >> ~/.bashrc
$ source ~/.bashrc

ここまでで、ruby 2.7のインストールは完了です。

shell のインストール

EV3rtのコンパイル時に、rubyのスクリプトで用いるshellというライブラリが必要なため、以下のコマンドによりインストールします。

Ubuntu
$ gem install shell

コンパイルの確認

workspaceフォルダに移動し、アプリケーションがコンパイル出来るか確認します。

Ubuntu
$ make app=helloev3

workspaceフォルダにappファイルが出来ていれば、コンパイル完了です。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?