Node.js源代码构建在ARM上给出了分段错误

cyr*_*oxx 12 arm v8 segmentation-fault node.js ubuntu-12.10

tl; dr:我试图在运行Ubuntu 12.10(量子)的基于ARMv7的Cubox上安装node.js. 从源代码编译node.js时(参见下面的"第二次尝试"),node会产生分段错误.我能在这做什么?

第一次尝试

首先,我尝试通过包管理器安装node.js,遵循这里给出的Ubuntu的说明:通过包管理器安装Node.js:Ubuntu,Mint

添加使用那里提到的存储库sudo add-apt-repository ppa:chris-lea/node.js似乎工作正常:

You are about to add the following PPA to your system:
 Evented I/O for V8 javascript. Node's goal is to provide an easy way to build scalable network programs
 More info: https://launchpad.net/~chris-lea/+archive/node.js
Press [ENTER] to continue or ctrl-c to cancel adding it

gpg: keyring `/tmp/tmpp0owib/secring.gpg' created
gpg: keyring `/tmp/tmpp0owib/pubring.gpg' created
gpg: requesting key C7917B12 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpp0owib/trustdb.gpg: trustdb created
gpg: key C7917B12: public key "Launchpad chrislea" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK
Run Code Online (Sandbox Code Playgroud)

但是,sudo apt-get install nodejs给我错误:

E: Unable to locate package nodejs
Run Code Online (Sandbox Code Playgroud)

我认为这是因为我有一个基于ARM的系统.据我所知,从包详细信息来看,repo只包含i386和amd64的构建版本.我的假设是对的吗?

第二次尝试

所以我的下一次尝试是从源安装node.js.我使用了以下要点中给出的指令:Node.js和NPM在30秒内完成.一切似乎都有效,包括make install.但是install.sh,在gist的最后一行中执行脚本失败,因为node会产生分段错误.现在我想知道如何在我的机器上正确安装node.js?

为了说明我的问题,这里有一些输出:

install.sh输出

这是install.sh运行后的输出make install,如上面提到的要点安装说明中所述.

cyroxx@cubox:~/node-latest-install$ curl https://npmjs.org/install.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7882  100  7882    0     0  11251      0 --:--:-- --:--:-- --:--:-- 14984
tar=/bin/tar
version:
tar (GNU tar) 1.26
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.
install npm@latest
fetching: http://registry.npmjs.org/npm/-/npm-1.2.21.tgz
Segmentation fault
Segmentation fault
You need node  to run this program.
node --version reports: v0.10.7
Please upgrade node before continuing.
It failed
Run Code Online (Sandbox Code Playgroud)

节点输出

cyroxx@cubox:~/node-latest-install$ node
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

make Debug build

运行makeBUILDTYPE=Debug生成此输出:

cyroxx@cubox:~/node-latest-install$ make -C out BUILDTYPE=Debug
make: Entering directory `/home/cyroxx/node-latest-install/out'
  CXX(target) /home/cyroxx/node-latest-install/out/Debug/obj.target/v8_base/deps/v8/src/arm/stub-cache-arm.o
../deps/v8/src/arm/stub-cache-arm.cc: In function 'void v8::internal::ProbeTable(v8::internal::Isolate*, v8::internal::MacroAssembler*, v8::internal::Code::Flags, v8::internal::StubCache::Table, v8::internal::Register, v8::internal::Register, v8::internal::Register, v8::internal::Register, v8::internal::Register, v8::internal::Register)':
../deps/v8/src/arm/stub-cache-arm.cc:106:15: error: comparison of unsigned expression < 0 is always false [-Werror=type-limits]
cc1plus: all warnings being treated as errors
make: *** [/home/cyroxx/node-latest-install/out/Debug/obj.target/v8_base/deps/v8/src/arm/stub-cache-arm.o] Error 1
make: Leaving directory `/home/cyroxx/node-latest-install/out'
Run Code Online (Sandbox Code Playgroud)

这有什么不对?这是V8的ARM实现中的错误吗?也许没有(正确)设置的任何编译器标志?还要别的吗?我完全陷入困境.

小智 36

我在几台不同的ARM计算机上也遇到过这个问题.没有快照功能的编译对我有用.快照是一种V8功能,允许节点更快启动,并且似乎存在ARM的错误.

./configure --without-snapshot
make
sudo make install
Run Code Online (Sandbox Code Playgroud)

http://www.armhf.com/index.php/node-js-for-the-beaglebone-black/

  • 感谢Jeremy."nvm install 0.10 --without-snapshot"在我的三星chromebook上为我构建了一个0.10.12的工作. (4认同)