Как я кросс-компилирую node.js для архитектуры ARM? GCC не сообщает о ABI FP, скомпилированном для

cd не внешняя команда, это - только встроенная оболочка, таким образом, sudo не может выполнить его. Причина, почему cd только существует, как встроенная оболочка - то, что процесс не может влиять на текущий каталог другого процесса; поэтому программа, которая изменяет текущий каталог и выходы сразу, бесполезна. (Почти бесполезный: a cd программа возвратила бы состояние, которое указывает, было ли это успешно.)

Если Вы хотите измениться на каталог и затем команды выполнения как другой пользователь, выполнить оболочку, которая делает все это.

sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'
3
05.01.2015, 23:48
2 ответа

Использование GCC 4.5.1 - FAIL

arm-none-linux-gnueabi-gcc (ctng-1.8.1-FA) 4.5.1 не сообщает о скомпилированном FP ABI, как указано в сообщении об ошибке. Узнайте больше о проблеме

Я пытался использовать ./configure --with-arm-float-abi=softpf и soft, как предлагали Роберт или Тьяго. Я не следовал этому пути до конца.

Environment

export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
export PKG_CONFIG_PATH=/usr/arm-linux-gnueabi/lib/pkgconfig 
export CC=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-gcc
export CXX=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-g++
export AR=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-ar
export RANLIB=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-ranlib
export LINK="${CXX}"
export CCFLAGS="-march=armv7-a -mtune=cortex-a8 -mfpu=vfp -mfloat-abi=soft "
export CXXFLAGS="-march=armv7-a -mtune=cortex-a8 -mfpu=vfp -mfloat-abi=soft "
export OPENSSL_armcap=7
export GYPFLAGS="-Darmeabi=soft -Dv8_use_arm_eabi_hardfloat=false -Dv8_can_use_vfp3_instructions=true -Dv8_can_use_vfp2_instructions=true -Darm7=1"
export VFP3=on
export VFP2=on
export PREFIX_DIR=/usr

Configure

  ./configure --without-snapshot --dest-cpu=arm --dest-os=linux --with-arm-float-abi=soft --prefix="${PREFIX_DIR}" 

"Ваша версия GCC не сообщает об ошибке FP ABI, скомпилированной для"

vagrant@vagrant:~/node-v0.10.35$ make
make -C out BUILDTYPE=Release V=1
make[1]: Entering directory `/home/vagrant/node-v0.10.35/out'
  /opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-g++ '-DENABLE_DEBUGGER_SUPPORT' '-DENABLE_EXTRA_CHECKS' '-DV8_TARGET_ARCH_ARM' '-DUSE_EABI_HARDFLOAT=0' -I../deps/v8/src  -Wall -Wextra -Wno-unused-parameter -pthread -fno-strict-aliasing -O2 -fno-strict-aliasing -fno-tree-vrp -fno-omit-frame-pointer -fno-rtti -fno-exceptions -MMD -MF /home/vagrant/node-v0.10.35/out/Release/.deps//home/vagrant/node-v0.10.35/out/Release/obj.target/v8_base/deps/v8/src/platform-linux.o.d.raw -march=armv7-a -mtune=cortex-a8 -mfpu=vfp -mfloat-abi=soft  -c -o /home/vagrant/node-v0.10.35/out/Release/obj.target/v8_base/deps/v8/src/platform-linux.o ../deps/v8/src/platform-linux.cc
../deps/v8/src/platform-linux.cc:223:2: error: #error "Your version of GCC does not report the FP ABI compiled for." "Please report it on this issue" "http://code.google.com/p/v8/issues/detail?id=2140"
../deps/v8/src/platform-linux.cc: In static member function 'static bool v8::internal::OS::ArmUsingHardFloat()':
../deps/v8/src/platform-linux.cc:230:1: warning: no return statement in function returning non-void
make[1]: *** [/home/vagrant/node-v0.10.35/out/Release/obj.target/v8_base/deps/v8/src/platform-linux.o] Error 1
make[1]: Leaving directory `/home/vagrant/node-v0.10.35/out'
make: *** [node] Error 2

Используя GCC 4.6. 3 - CROSS-COMPILATION PASS

Удалена -без-ссыли в моей команде конфигурации и скомпилирована хорошо (без ошибок) с помощью arm-linux-gnueabihf-g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

vagrant@vagrant:~/node-v0.10.35$ ./configure --without-snapshot --dest-cpu=arm --dest-os=linux --with-arm-float-abi=hard --prefix="${PREFIX_DIR}"

Она компилирует и хорошо работает на цели!

Однако npm показывает ошибки в заданном вопросе здесь

2
27.01.2020, 21:23

Похоже, вы говорите об этом, вы хотите, чтобы он хочешь, что блок с плавающей плавающей вектором ( ( - MFPU = VFP ), но что GCC должен генерировать инструкции с плавающей запятой ([ - mfloat-abi = hard -duse_eabi_hardfloat ).

Из Параметры ARM GCC :

Использование -Mfloat-Abi = Hard с VFP Coprocessors не поддерживается. Использовать -Mfloat-Abi = SoftFP с соответствующей опцией MFPU, чтобы позволить компилятору генерировать код, который использует аппаратное обеспечение Возможности с плавающей точкой для этих процессоров.

Я использую следующие параметры с Ti AM3505 (Cortex A8 + FPU) и его компилирует OK (GCC 4.8.2):

-March = ARMV7-A -Mthumb-Interwork - MMfloat-Abi = Hard -mfpu = Neon -mtune = Cortex-A8

1
27.01.2020, 21:23

Теги

Похожие вопросы