Rails(6) アプリケーションで ovirt-engine-sdk gem を使用しようとしています。私の Mac マシンではバンドルのインストールが失敗します。 PR によると、Gem は Ruby 3.x バージョンで動作するはずですが、バンドル インストールを行うと次のエラーが発生します。
Installing ovirt-engine-sdk 4.6.0 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: /Users/xxx/.rvm/gems/ruby-3.0.0/gems/ovirt-engine-sdk-4.6.0/ext/ovirtsdk4c
/Users/xxx/.rvm/rubies/ruby-3.0.0/bin/ruby -I /Users/sh077503/.rvm/rubies/ruby-3.0.0/lib/ruby/3.0.0 -r ./siteconf20240306-89931-47eohb.rb extconf.rb
checking for xml2-config... yes
checking for curl-config... yes
creating Makefile
current directory: /Users/xxx/.rvm/gems/ruby-3.0.0/gems/ovirt-engine-sdk-4.6.0/ext/ovirtsdk4c
make "DESTDIR=" clean
current directory: /Users/xxx/.rvm/gems/ruby-3.0.0/gems/ovirt-engine-sdk-4.6.0/ext/ovirtsdk4c
make "DESTDIR="
compiling ov_error.c
compiling ov_http_client.c
ov_http_client.c:216:29: warning: excess elements in array initializer [-Wexcess-initializers]
.reserved = { NULL, NULL }
^~~~
/Library/Developer/CommandLineTools/usr/lib/clang/15.0.0/include/stddef.h:89:16: note: expanded from macro 'NULL'
# define NULL ((void*)0)
^~~~~~~~~~
ov_http_client.c:501:9: error: call to undeclared function 'ruby_thread_has_gvl_p'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
if (ruby_thread_has_gvl_p()) {
^
ov_http_client.c:853:25: warning: implicit conversion from enumeration type 'CURLMcode' to different enumeration type 'CURLcode' [-Wenum-conversion]
context_ptr->code = curl_multi_wait(context_ptr->handle, NULL, 0, timeout, NULL);
~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ov_http_client.c:874:25: warning: implicit conversion from enumeration type 'CURLMcode' to different enumeration type 'CURLcode' [-Wenum-conversion]
context_ptr->code = curl_multi_perform(context_ptr->handle, &pending);
~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ov_http_client.c:1009:47: warning: incompatible function pointer types passing 'int (VALUE, VALUE, struct curl_slist **)' (aka 'int (unsigned long, unsigned long, struct curl_slist **)')
to parameter of type 'int (*)(VALUE, VALUE, VALUE)' (aka 'int (*)(unsigned long, unsigned long, unsigned long)') [-Wincompatible-function-pointer-types]
rb_hash_foreach(request_ptr->headers, ov_http_client_add_header, (VALUE) headers);
^~~~~~~~~~~~~~~~~~~~~~~~~
/Users/sh077503/.rvm/rubies/ruby-3.0.0/include/ruby-3.0.0/ruby/internal/intern/hash.h:33:35: note: passing argument to parameter here
void rb_hash_foreach(VALUE, int (*)(VALUE, VALUE, VALUE), VALUE);
^
4 warnings and 1 error generated.
make: *** [ov_http_client.o] Error 1
make failed, exit code 2
Rails アプリケーションに ovirt-engine-sdk をインストール/統合するにはどうすればよいですか?よろしくお願いいたします。他にサポートが必要なファイルや情報がある場合はお知らせください。
これと非常によく似た問題がありました。走った
gem install ovirt-engine-sdk – –with-cflags=“-Wno-error=implicit-function-declaration”
に続く
バンドルインストール
そしてすべてがうまくいきました。