teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

dlfcnについて追記

2019/03/05 11:29

投稿

raccy
raccy

スコア21768

answer CHANGED
@@ -1,4 +1,4 @@
1
- エラーの原因ですが、2019年3月4日時点での最新のsqlite3 v1.4.0では[dlおよびdlopen()(Linuxに存在するライブラリとCの関数)が必須](https://github.com/sparklemotion/sqlite3-ruby/commit/f4ffec281a2888c1e536662ac1ea740fd3f5433c)となっているのですが、MSYS2/Mingw-w64環境にはこの関数が存在しないため、必要な関数が無いと言うことでコンパイルに失敗してしまいます。sqlite3の最新版(v1.4.0)特有の問題であり、**Rubyのバージョンは関係ありません。**sqlite3のバージョンを下げない限り、Rubyのバージョンを下げても問題は解決しません。
1
+ エラーの原因ですが、2019年3月4日時点での最新のsqlite3 v1.4.0では[dlおよびdlopen()(Linuxに存在するライブラリとCの関数)が必須](https://github.com/sparklemotion/sqlite3-ruby/commit/f4ffec281a2888c1e536662ac1ea740fd3f5433c)となっているのですが、MSYS2/Mingw-w64環境には標準でこの関数が存在しない(入れる方法は後述)ため、必要な関数が無いと言うことでコンパイルに失敗してしまいます。sqlite3の最新版(v1.4.0)特有の問題であり、**Rubyのバージョンは関係ありません。**sqlite3のバージョンを下げない限り、Rubyのバージョンを下げても問題は解決しません。
2
2
 
3
3
  v1.3.13を指定してインストールすることで解決します。次のコマンドでインストールしてみてください。
4
4
  ※ ruby 2.6.1p33 (2019-01-30 revision 66950) [x64-mingw32]で確認しています。
@@ -7,4 +7,14 @@
7
7
  gem install sqlite3 --version 1.3.13 --platform ruby
8
8
  ```
9
9
 
10
- Ruby 2.5以上の場合は`--platform ruby`は必須です(sqlite3 1.3.13のmingw版にはRuby 2.4までしかWindows用バイナリが用意されていないため)。sqlite3側でもそのうち修正はされるとは思いますが、まだ誰もIssuesに投げていないようなので、いつ修正されるかは不明です。
10
+ Ruby 2.5以上の場合は`--platform ruby`は必須です(sqlite3 1.3.13のmingw版にはRuby 2.4までしかWindows用バイナリが用意されていないため)。sqlite3側でもそのうち修正はされるとは思いますが、まだ誰もIssuesに投げていないようなので、いつ修正されるかは不明です。
11
+
12
+ ---
13
+
14
+ asmさんの情報より
15
+
16
+ ```
17
+ ridk exec pacman -S mingw-w64-x86_64-dlfcn
18
+ ```
19
+
20
+ でMSYS2上にdlfncパッケージを入れておくとコンパイルが出来ることを確認しました。1.4.0を使いたいなら、この方法の方が良いかもしれません。