25

node.js v0.7.9 をラズベリー pi 用にコンパイルしようとしていますが、ノードと v8 は非常に大きいため、別のより強力な PC でクロスコンパイルできることを望んでいます。https://github.com/raspberrypi/toolsの linux-x86arm-bcm2708-linux-gnueabiツールチェーンを使用しており、それらを使用してシステムの他の実行可能ファイルを正常にビルドしました。CC、CXX、CPP、STRIP、OBJCOPYなどを設定することになりました。環境変数内の同等のツールチェーンに変数を追加し、configure with:を実行して、最終的な実行可能ファイルを取得します。ただし、システムにコピーして実行すると、次のエラーが発生します。./configure --dest-cpu=arm --without-snapshot

Extension or internal compilation error at line 0.
Segmentation fault

node --versionただし、や などの JavaScript 以外のタスクでは、セグメンテーション違反は発生しませんnode --help。この問題を引き起こしている可能性のある CFLAGS/CXXFLAGS はありますか? ちょっと混乱....

4

7 に答える 7

13

NodeJS は、いくつかの Linux ディストリビューション用にコンパイル済みで利用できます: https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

NodeJS はまだ Debian のテスト段階にあるため、NodeJS を Debian wheezy の下の Raspberry Pi にインストールするには、次のようにします。

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 は、私の Raspberry Pi で非常にうまく動作し、安定しています。

于 2012-06-21T21:29:34.320 に答える
5

質問が最初に尋ねられて以来、私はこれに少し取り組んでおり、クロスコンパイラ設定を自動検出するのに役立ついくつかのパッチを追加しました。リポジトリ内の Node.js は (現時点では) かなり古いバージョンであり、ハード フロート (VFP) アーキテクチャを完全にサポートしている場合とサポートしていない場合があります。

詳細な HOWTO については、http://n8.io/cross-compiling-nodejs-v0.8/ にある Nathan Rajlich の記事を参照してください

https://gist.github.com/3245130で、同じハードウェアでこのような面倒なことをすべてやりたくない他の人のために、バイナリを投稿しました。

于 2012-10-13T12:43:39.653 に答える
5

ただメモ - これは私にとってはうまくいきましたが、NPM をインストールしませんでした。したがって、NPMが必要な場合(あなたが最も確実にそうしていると思います)、必ず実行してください

apt-get インストール npm

ノードをインストールした後、更新リストから更新場所を削除する前に。

于 2012-06-29T22:33:55.853 に答える
1

これは、Jenkins を使用して ARMv6 (Raspbery Pi) 用の NodeJS を自動的にクロス コンパイルするために私が作成したスクリプトです。

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

@Adam MWの「パッキング」スニペットを使用しました

スクリプトは必要なものをすべて自動的にダウンロードし、ビルドを開始します。

v0.10.30この問題により 、現在の ( ) バージョンはコンパイルされないことに注意してください: https://github.com/joyent/node/issues/8062#issuecomment-52541037

with を実行し_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!"
于 2014-08-18T21:11:48.743 に答える
0

ただ頭を上げて、今できることは次のとおりです。

sudo apt-get install nodejs npm
于 2014-01-07T22:01:11.777 に答える