npm -v和node.js在交叉编译的节点js0.12.2上抛出非法指令

我使用以下工具链为爱特梅尔SAMA5D36交叉编译nodejs 0.12.2

export AR=arm-linux-gnueabihf-ar export CC=arm-linux-gnueabihf-gcc export CXX=arm-linux-gnueabihf-g++ export LINK=arm-linux-gnueabihf-g++ 

并configuration和构build如下

./configure –without-snapshot –dest-cpu = arm –dest-os = linux –prefix = / home / root / nodejs-v0.12.2

make make DESTDIR = / home / user / Desktop / nodejs_arm / nodebins

已编译的文件夹在/ home / user / Desktop / nodejs_arm / nodebins / home / root内部生成

我把这个文件夹压缩成一个tar文件,然后传输到AtmelSAMA5D36 arm board.I在/ home / root目录下的板上解压,创build下面的符号链接

 ln -s /home/root/nodejs-v0.12.2/bin/npm /bin/npm ln -s /home/root/nodejs-v0.12.2/bin/node /bin/node 

当我使用“node -v”和“npm -v”进行testing时,

“节点-v”给出正确的输出,但是

“npm -v”抛出“非法指令”错误
与“节点”相同。

然而交叉编译nodejs 0.10.40工作得很好。

任何帮助,高度赞赏。

更新:

 (gdb) run Starting program: /usr/bin/node [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/libthread_db.so.1". Program received signal SIGILL, Illegal instruction. 0xb6edfec0 in _armv7_neon_probe () from /usr/lib/libcrypto.so.1.0.0 (gdb) c Continuing. Program received signal SIGILL, Illegal instruction. 0xb6edfec8 in _armv7_tick () from /usr/lib/libcrypto.so.1.0.0 (gdb) c Continuing. [New Thread 0xb65ca4c0 (LWP 3774)] [New Thread 0xb67ca4c0 (LWP 3773)] [New Thread 0xb69ca4c0 (LWP 3772)] [New Thread 0xb6bca4c0 (LWP 3771)] Program received signal SIGILL, Illegal instruction. 0x0054b504 in v8::internal::ComputeFlagListHash() () (gdb) c Continuing. [Thread 0xb65ca4c0 (LWP 3774) exited] [Thread 0xb67ca4c0 (LWP 3773) exited] [Thread 0xb69ca4c0 (LWP 3772) exited] [Thread 0xb6bca4c0 (LWP 3771) exited] Program terminated with signal SIGILL, Illegal instruction. The program no longer exists. (gdb) q # gdb node -e 0 GNU gdb (GDB) 7.9.1 Copyright (C) 2015 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. Type "show copying" and "show warranty" for details. This GDB was configured as "arm-buildroot-linux-uclibcgnueabihf". Type "show configuration" for configuration details. For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from node... (gdb) (gdb) run Starting program: /usr/bin/node [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/libthread_db.so.1". [New Thread 0xb64f84c0 (LWP 14382)] [New Thread 0xb66f84c0 (LWP 14381)] [New Thread 0xb68f84c0 (LWP 14380)] [New Thread 0xb6af84c0 (LWP 14379)] Program received signal SIGILL, Illegal instruction. 0x0054b504 in v8::internal::ComputeFlagListHash() () (gdb) (gdb) run The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /usr/bin/node [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/libthread_db.so.1". [New Thread 0xb653d4c0 (LWP 14531)] [New Thread 0xb673d4c0 (LWP 14530)] [New Thread 0xb693d4c0 (LWP 14529)] [New Thread 0xb6b3d4c0 (LWP 14528)] Program received signal SIGILL, Illegal instruction. 0x0054b504 in v8::internal::ComputeFlagListHash() () (gdb) Program received signal SIGILL, Illegal instruction. Undefined command: "Program". Try "help". (gdb) 0x0054b504 in v8::internal::ComputeFlagListHash() ()bt Undefined command: "0x0054b504". Try "help". (gdb) bt #0 0x0054b504 in v8::internal::ComputeFlagListHash() () #1 0x007b8a54 in v8::internal::V8::InitializeOncePerProcessImpl() () #2 0x009281b0 in v8::base::CallOnceImpl(int*, void (*)(void*), void*) () #3 0x007b8ba8 in v8::internal::V8::Initialize() () #4 0x0028fc74 in v8::V8::Initialize() () #5 0x00897a34 in node::Start(int, char**) () #6 0xb6b95634 in __uClibc_main () from /lib/libc.so.1 #7 0x00000000 in ?? () Backtrace stopped: previous frame identical to this frame (corrupt stack?) (gdb) q 

我们有一个类似的问题,试图通过SAMA5D31上的buildroot工具链使用nodejs 6.1.0,并遇到相同的“非法指令”问题。 最后,我们切换到使用buildroot中旧版本(armv5和更旧版本)中包含的0.10.45版本。

在对此进行故障诊断时,问题似乎出现在节点使用的nodejs和OpenSSL库中,其中编译代码尝试将浮点操作使用Neon指令。 SAMA5D3X处理器报告为arm7,但没有Neon FPU。 然而,nodejs(和openssl为我们)正试图使用​​霓虹灯指令,因为它假定为一个arm7它有。 在nodejs可以处理非霓虹灯armV7之前,最好的select是使用0.10.40或0.10.45版本的节点,直到可以解决。 或者自己修改构buildconfiguration来处理非Neon arm7的节点。