Node.js построение исходного кода, дающее ошибку сегментации на ARM

tl; dr: Я попытался установить node.js на Cubox на основе ARMv7, работающий с Ubuntu 12.10 (quantal). При компиляции 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 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

Однако sudo apt-get install nodejs дает мне ошибку:

E: Unable to locate package nodejs

Я предполагаю, что это потому, что у меня есть ARM-система. Насколько я могу сказать из деталей пакета, репо содержит только сборки для i386 и amd64. Правильно ли мое предположение?

Вторая попытка

Итак, моя следующая попытка заключалась в установке node.js из исходного кода. Я использовал инструкции, приведенные в следующем виде: Node.js и NPM за 30 секунд. Кажется, все работает, включая make install. Но выполнение install.sh script в последней строке gist терпит неудачу, так как node вызывает ошибку сегментации. Теперь мне интересно, что я могу сделать для правильной установки node.js на моей машине?

Чтобы проиллюстрировать мою проблему, вот какой вывод:

вывод install.sh

Это вывод install.sh после запуска make install, как описано в инструкциях по установке gist, упомянутых выше.

[email protected]:~/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 [email protected]
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

node вывод

[email protected]:~/node-latest-install$ node
Segmentation fault

сделать сборку отладки

Запуск make с помощью BUILDTYPE=Debug выводит этот результат:

[email protected]:~/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'

Что здесь не так? Является ли это ошибкой в ​​реализации ARM для V8? Может быть, какие-либо флагов компилятора, которые не установлены (правильно)? Что-нибудь еще? Я полностью застрял.

Ответ 1

У меня тоже была проблема с несколькими компьютерами ARM. Компиляция без функции моментального снимка работала для меня. Snapshot - это функция V8, которая позволяет node запускаться быстрее, и, похоже, для ARM существует ошибка.

./configure --without-snapshot
make
sudo make install

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

Ответ 2

Мне не удалось создать на Samsung Chromebook XE303C12I Crouton запуск Unity, даже с --without-snapshot и --with-arm-float-abi=hard, поэтому я использовали предварительно скомпилированные двоичные файлы для устройств Linux ARM.

Бинарные файлы можно найти в каталоге выпуска по адресу nodejs.org/dist/{version number}

Например, двоичный файл ARM для v0.10.24 можно скачать здесь. (http://nodejs.org/dist/v0.10.24/node-v0.10.24-linux-arm-pi.tar.gz)

Здесь script для загрузки и установки двоичного файла. После установки node обязательно добавьте path/to/bin/node к $PATH.