発生したエラー
bundle install時に以下のエラーが発生した。
Installing prism 0.19.0 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory:
(略)
src/diagnostic.c:285:69: error: 'calloc' sizes specified with 'sizeof' in the
earlier argument and not in the later argument [-Werror=calloc-transposed-args]
285 | pm_diagnostic_t *diagnostic = (pm_diagnostic_t *)
calloc(sizeof(pm_diagnostic_t), 1);
|
^~~~~~~~~~~~~~~
src/diagnostic.c:285:69: note: earlier argument should specify number of
elements, later size of each element
src/diagnostic.c: In function 'pm_diagnostic_list_append_format':
src/diagnostic.c:315:69: error: 'calloc' sizes specified with 'sizeof' in the
earlier argument and not in the later argument [-Werror=calloc-transposed-args]
315 | pm_diagnostic_t *diagnostic = (pm_diagnostic_t *)
calloc(sizeof(pm_diagnostic_t), 1);
|
^~~~~~~~~~~~~~~
src/diagnostic.c:315:69: note: earlier argument should specify number of
elements, later size of each element
cc1.exe: all warnings being treated as errors
make: *** [Makefile:49: build/static/diagnostic.o] エラー 1
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
原因
c言語のコードで使用されているcalloc
関数の引数の指定に誤りがあること。
void *calloc(size_t num, size_t size);
num
は確保するメモリの「要素数」、size
は各要素の「サイズ」
エラーが発生しているコード
pm_diagnostic_t *diagnostic = (pm_diagnostic_t *) calloc(sizeof(pm_diagnostic_t), 1);
先にサイズを指定し、その後メモリの要素数を指定している。
正しいコード
pm_diagnostic_t *diagnostic = (pm_diagnostic_t *) calloc(1, sizeof(pm_diagnostic_t));
修正
該当のコードを手作業で修正したが、bundle installする度にインストールし直されるため効果なし。
エラーが発生している箇所は、prismというgemのインストールの箇所だが、Gemfileで特段指定していなかった。また、バージョンが古いことに問題がある可能性を考え、Gemファイルに以下を追加した。
Gemfile
gem "prism", "1.2.0"
これに伴って、prismのバージョンと会わなくなった他のgemのバージョンを変更したところ、エラーなくbundle installが完了した。