nf
2020年12月2日 16時59分
ATDE7 に nvm コマンドを使用して node.js をインストールしようとしたところ、コンパイルエラーとなりました。
コマンド
$ nvm install 14.15.1
エラー内容
cc -o /home/atmark/.nvm/.cache/src/node-v14.15.1/files/out/Release/obj.target/zlib/deps/zlib/contrib/optimizations/inffast_chunk.o ../deps/zlib/contrib/optimizations/inffast_chunk.c '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DHAVE_HIDDEN' '-DADLER32_SIMD_SSSE3' '-DINFLATE_CHUNK_SIMD_SSE2' '-DCRC32_SIMD_SSE42_PCLMUL' -I../deps/zlib -pthread -Wall -Wextra -Wno-unused-parameter -m32 -O3 -fno-omit-frame-pointer -MMD -MF /home/atmark/.nvm/.cache/src/node-v14.15.1/files/out/Release/.deps//home/atmark/.nvm/.cache/src/node-v14.15.1/files/out/Release/obj.target/zlib/deps/zlib/contrib/optimizations/inffast_chunk.o.d.raw -c In file included from ../deps/zlib/contrib/optimizations/inffast_chunk.c:10:0: ../deps/zlib/contrib/optimizations/chunkcopy.h: In function ‘loadchunk’: ../deps/zlib/contrib/optimizations/chunkcopy.h:52:5: warning: SSE vector return without SSE enabled changes the ABI [-Wpsabi] const unsigned char FAR* s) { ^~~~~ In file included from ../deps/zlib/contrib/optimizations/chunkcopy.h:32:0, from ../deps/zlib/contrib/optimizations/inffast_chunk.c:10: ../deps/zlib/contrib/optimizations/chunkcopy.h: In function ‘v_load64_dup’: /usr/lib/gcc/i686-linux-gnu/6/include/emmintrin.h:625:1: error: inlining failed in call to always_inline ‘_mm_set1_epi64x’: target specific option mismatch _mm_set1_epi64x (long long __A) ^~~~~~~~~~~~~~~ In file included from ../deps/zlib/contrib/optimizations/inffast_chunk.c:10:0: ../deps/zlib/contrib/optimizations/chunkcopy.h:215:10: note: called from here return _mm_set1_epi64x(i64); ^~~~~~~~~~~~~~~~~~~~
システムバージョン
$ uname -a Linux atde7 4.9.0-12-686-pae #1 SMP Debian 4.9.210-1+deb9u1 (2020-06-07) i686 GNU/Linux
対応方法ご教授いただければ幸いです。
よろしくお願いいたします。
コメント
花田様
頂いたパッチで 14.15.1 をインストールできました。
ありがとうございました。
話がそれて恐縮ですが、参考までに伺いたいのですが、
> ATDE7相当の環境をamd64で構築
Debian9 をセットアップ後、以下ページの「3. クロス開発環境のインストール」でATDE7 と同等環境になりますでしょうか?
https://armadillo.atmark-techno.com/blog/8700/3542
at_akihito.irie
入江です。
> Debian9 をセットアップ後、以下ページの「3. クロス開発環境のインストール」でATDE7 と同等環境になりますでしょうか?
> https://armadillo.atmark-techno.com/blog/8700/3542
上記ページの「3. クロス開発環境のインストール」の「6. Armadillo用のク
ロス開発環境一式をインストールします。」まで行った後に以下の手順を行う
ことでATDE7と同等の環境が作成できます。
1. /etc/apt/preference.d/atmark-techno-pin-1001を作成し、以下のように編集します。
[PC]$ sudo vi /etc/apt/preferences.d/atmark-techno-pin-1001 [PC]$ cat /etc/apt/preferences.d/atmark-techno-pin-1001 Package: * Pin: origin download.atmark-techno.com Pin-Priority: 1001
2. 以下のコマンドを実行し、必要なパッケージをインストールします。
[PC]$ sudo dpkg --add-architecture armhf [PC]$ sudo apt-get update [PC]$ sudo apt-get install atftpd minicom emacs gedit git git-svn valgrind dosfstools squashfs-tools uim-mozc apt-file openbsd-inetd manpages-dev manpages-ja-dev lighttpd sbuild open-vm-tools-dkms dkms open-vm-tools-desktop libncurses-dev a600-essential
以上、よろしくお願いいたします。
at_hanada
2020年12月2日 22時07分
花田です。
> ATDE7 に nvm コマンドを使用して node.js をインストールしようとしたところ、コンパイルエラーとなりました。
> ../deps/zlib/contrib/optimizations/chunkcopy.h: In function ‘v_load64_dup’:
> /usr/lib/gcc/i686-linux-gnu/6/include/emmintrin.h:625:1: error: inlining failed in call to always_inline ‘_mm_set1_epi64x’: target specific option mismatch
> _mm_set1_epi64x (long long __A)
> ^~~~~~~~~~~~~~~
i386(x86)環境では使えない(amd64用の)optionでビルドしようとしてますね。
ATDE7相当の環境をamd64で構築した場合は、当たらない問題です。
また、現時点で最新版LTSとなっているv14.15.1特有のバグであって、v15.3.0を試してみると問題なく通ります。
直接のnodeのissueはこれです。
zlib change broke x86 builds · Issue #33019 · nodejs/node · GitHub
https://github.com/nodejs/node/issues/33019
直接的には、下記PRが通ってしまったことによる副作用です。
deps: fix zlib compilation for CPUs without SIMD features by addaleax · Pull Request #32627 · nodejs/node · GitHub
https://github.com/nodejs/node/pull/32627
あんまり綺麗な方法にはなりませんが「i386環境のまま」「v14.15.1を使用」するワークアラウンドとして、下記のような方法を紹介します。
添付のnvm.patchを(nvmのインストールされたアカウントの)ホームディレクトリに置いてから、
これだけです。
patchの中身は下記のようなもの。
wgetしているのが、先ほどの問題のPRにあたるパッチ。これを使って、v14.15.1の時だけ強制的に逆パッチしているだけです。お試しください。