2012-06-14 4 views
23

Я пытаюсь получить node.js v0.7.9 для компиляции для малины pi, но поскольку узлы и v8 довольно большие, я надеюсь, что смогу для кросс-компиляции на другом более мощном ПК. Я использую toolchain linux-x86 arm-bcm2708-linux-gnueabi от https://github.com/raspberrypi/tools и использовал их для успешной сборки других исполняемых файлов для системы. Я закончил настройку CC, CXX, CPP, STRIP, OBJCOPY и т. Д. переменные для эквивалентов инструментальной цепочки в переменных среды и выполнили настройку с помощью: ./configure --dest-cpu=arm --without-snapshot, чтобы получить окончательный исполняемый файл. Копирование его к системе и запустить его, однако производит следующее сообщение об ошибке:Кросс-компиляция Node.js для ARM6 (Raspberry Pi)

Extension or internal compilation error at line 0. 
Segmentation fault 

Однако ошибка сегментации не происходит для любого из не яваскрипт задач, таких как node --version и node --help. Могут ли отсутствовать какие-либо CFLAGS/CXXFLAGS, вызывающие эту проблему? Бит спутать ....

+1

Существует парень, который пытался сделать кросс-компиляцию всего, но в итоге перекрещивался с v8 и компилировал узел в RPI. http://blog.greg-net.co.uk/post/21228054876/building-node-js-for-raspberry-pi А вот ссылка для компиляции на ИРЦЕ в Arch .. Http: //www.nodejs-news.com/nodejs-tech/nodejs-armv5-armv6-howto/ Возможно, вы видели их, но могли бы быть хорошими для кого-то другого. – kmpm

+0

Я понятия не имел, сколько времени это займет. Вероятно, час составления всего необходимого для node.js 0,10 на моем малине Pi, и он все еще на нем. < – Pluto

ответ

5

Я немного поработал над этим вопросом, так как вопрос был изначально задан, даже добавил некоторые исправления, чтобы помочь автоматически определять параметры кросс-компилятора. Node.js в репозиториях (на данный момент) является довольно старой версией и может содержать или не поддерживать полную архитектуру с жестким поплавком (VFP).

Для полного детального HOWTO см Nathan Райлих напишут на http://n8.io/cross-compiling-nodejs-v0.8/

Я отправил двоичные файлы для других людей, которые не хотят, чтобы пройти через все эти хлопоты для того же аппаратное обеспечение на https://gist.github.com/3245130

13

NodeJS доступен скомпилированные для нескольких дистрибутивов Linux: https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

Поскольку NodeJS все еще находится в стадии тестирования для Debian, для того, чтобы установить NodeJS на моем Raspberry Pi под Debian хриплого , Я:

sudo su 
echo deb ftp://ftp.dk.debian.org/debian/ sid main > /etc/apt/sources.list.d/sid.list 
apt-get update 
apt-get install nodejs 
rm /etc/apt/sources.list.d/sid.list 
apt-get update 
exit 

NodeJS работает очень хорошо и стабильно на моей малиновой пи.

+1

, если вы получите ошибку NO_PUBKEY, поскольку я попытался выполнить следующие строки, чтобы получить и загрузить требуемый ключ. 'gpg --recv-keys AED4B06F473041FA --keyserver keys.gnupg.net' ' gpg -a --export AED4B06F473041FA | apt-key add -' Удача – edokan

+0

Я попробовал это сначала, но версия доступного node.js была 0,6, что соответствует 2 годам! По крайней мере nvm имел более новую версию ... Но все же 0.7. – Pluto

+0

Я получаю 'node -v' ->" Ошибка сегментации ". Как я могу это исправить (кроме создания из источника)? – Saran

5

Просто примечание - это отлично поработало для меня, но не установило NPM. Так что если вы хотите НПМ (которые вы наиболее конечно я думаю), убедитесь, чтобы запустить

APT-получить установку НПМ

после установки узла перед удалением места обновления из списка обновлений.

0

I удалось перебрать компиляцию nodejs версии 0.10 и запустить ее на Freescale i.MX6. Я создал скрипт перекрестного компиляции для настройки среды и выполнения make. Скрипт в основном просто устанавливает переменные CC, CXX и т. Д. Для моих инструментов кросс-компиляции, а также устанавливает арку и некоторые другие флаги для компилятора. Затем он запускает configure с dest-cpu = arm Я попытался также связать в библиотеке V8 (которую я тоже перекрестно скомпилировал), но он не будет компилироваться, когда я включил этот флаг плюс путь в configure. Когда я компилирую узел, он компилирует его собственный V8, так как мне удается скомпилировать, не указывая на библиотеку V8 (я вижу, что он компилирует некоторые материалы V8 во время компиляции)?

0

Всего ХА теперь вы можете просто сделать:

sudo apt-get install nodejs npm 
+0

Установлена ​​ли последняя версия nodejs? Когда я запускаю этот узел 0.6, загружается. – Brannon

1

Вот сценарий я написал, чтобы автоматически переходить компилировать NodeJS для ARMv6 (Raspbery Pi), используя Дженкинс.

https://gist.github.com/hertzg/12c2d7fc40f68ff6deeb

Я использовал «упаковку» @Adam M-W в фрагмент

Скрипт автоматически загрузит все необходимое и начать строительство.

Сразу отметим, что ток (v0.10.30) версия не будет компилироваться из-за этого вопроса: https://github.com/joyent/node/issues/8062#issuecomment-52541037

Run с _PARAMS_NODEJS_SOURCE_ARCHIVE_URL=http://nodejs.org/dist/v0.10.29/node-v0.10.29.tar.gz, чтобы получить последние кросс-компилировать состоянии версию.

#!/bin/bash 

set -e 
set -x 

### IF we dont have archive url prefix 
if [ -z "$_PARAMS_NODEJS_SOURCE_ARCHIVE_URL" ]; then 
    _PARAMS_NODEJS_SOURCE_ARCHIVE_URL=$(wget -qO- http://nodejs.org/dist/latest/ | egrep -o 'node-v[0-9\.]+.tar.gz' | tail -1); 
    _PARAMS_NODEJS_SOURCE_ARCHIVE_URL="http://nodejs.org/dist/latest/"$_PARAMS_NODEJS_SOURCE_ARCHIVE_URL 
fi 

if [ -z "$_PRAMS_RPI_TOOLS_SOURCE_ARCHIVE_URL" ]; then 
    _PRAMS_RPI_TOOLS_SOURCE_ARCHIVE_URL="https://github.com/raspberrypi/tools/archive/master.tar.gz" 
fi; 

NODEJS_SOURCE_ARCHIVE_FILENAME=$(basename $_PARAMS_NODEJS_SOURCE_ARCHIVE_URL) 
NODEJS_SOURCE_DIRECTORY=${NODEJS_SOURCE_ARCHIVE_FILENAME%.tar.gz} 
#Download NodeJS 
echo "-> Searching for NodeJS "$NODEJS_SOURCE_ARCHIVE_FILENAME; 
if [ ! -e "$PWD/$NODEJS_SOURCE_ARCHIVE_FILENAME" ]; then 
    echo "--> Downloading from "$_PARAMS_NODEJS_SOURCE_ARCHIVE_URL; 
    wget --no-check-certificate -O $NODEJS_SOURCE_ARCHIVE_FILENAME $_PARAMS_NODEJS_SOURCE_ARCHIVE_URL 
    echo "--> Download finished!" 
fi; 

echo "--> Extracting" 
rm -rf $NODEJS_SOURCE_DIRECTORY 
tar --overwrite -xf $NODEJS_SOURCE_ARCHIVE_FILENAME 

echo "--> Linking" 
ln -snf "$PWD/$NODEJS_SOURCE_DIRECTORY" "$PWD/node" 
echo "-> Done!" 


echo "-> Searching Raspberry Pi Toolset"; 
if [ ! -d "$PWD/rpi" ]; then 

    if [ ! -e "$PWD/rpi-tools.tar.gz" ] || [ -s "$PWD/rpi-tools.tar.gz" ]; then 
     echo "--> Downloading from "$_PRAMS_RPI_TOOLS_SOURCE_ARCHIVE_URL 
     wget --no-check-certificate -O "rpi-tools.tar.gz" $_PRAMS_RPI_TOOLS_SOURCE_ARCHIVE_URL 
     echo "--> Download finished" 
    else 
     echo "--> Found rpi-tools.tar.gz." 
    fi 

    echo "--> Extracting" 
    tar xf "rpi-tools.tar.gz" 
    echo "--> Linking tools-master to rpi" 
    ln -snf "$PWD/tools-master" "$PWD/rpi" 
else 
    echo "-> found" 
fi; 
echo "-> Done!" 

echo "-> Cross-Compile..." 

echo "--> Setup ENV" 
export PATH="$PWD/rpi/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin:"$PATH 
export HOST="arm-bcm2708hardfp-linux-gnueabi" 
export CC="${HOST}-gcc" 
export CXX="${HOST}-g++" 
export AR="${HOST}-ar" 
export RANLIB="${HOST}-ranlib" 
export LD="${HOST}-ld" 
export CPP="${HOST}-gcc -E" 
export STRIP="${HOST}-strip" 
export OBJCOPY="${HOST}-objcopy" 
export OBJDUMP="${HOST}-objdump" 
export NM="${HOST}-nm" 
export AS="${HOST}-as" 

"${HOST}-gcc" --version 
echo "--> Waiting 5s to contiue" 
pushd "$PWD/node" 
sleep 5 

echo "--> Clean" 
make clean 

echo "--> Configure" 
./configure --prefix=/ --without-snapshot --dest-cpu=arm --dest-os=linux 

echo "--> Build" 
VERSION=${NODEJS_SOURCE_DIRECTORY##node-} 
export BINARYNAME=node-${VERSION}-linux-arm-armv6j-vfp-hard 
mkdir ${BINARYNAME} 
make install DESTDIR=${BINARYNAME} V=1 PORTABLE=1 

echo "--> Pack" 
cp README.md ${BINARYNAME} 
cp LICENSE ${BINARYNAME} 
cp ChangeLog ${BINARYNAME} 
tar -czf ${BINARYNAME}.tar.gz ${BINARYNAME} 

echo "--> Cleanup" 
popd 
mv $PWD"/node/${BINARYNAME}.tar.gz" "./" 
echo "-> Done!" 
+0

Это помогло мне настроить встроенный проект, который не запускает диспетчер пакетов. Большое спасибо! – Banjocat

+0

Добро пожаловать – George