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

npm-v和node.js在交叉编译的nodejs0.12.2上抛出非法指令,node.js,arm,cross-compiling,v8,buildroot,Node.js,Arm,Cross Compiling,V8,Buildroot,我使用以下工具链交叉编译Atmel 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++ 并按如下方式配置和构建 ./configure--不带快照--dest cpu=arm--dest os=linux--prefix=/ho

我使用以下工具链交叉编译Atmel 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++
并按如下方式配置和构建

./configure--不带快照--dest cpu=arm--dest os=linux--prefix=/home/root/nodejs-v0.12.2

制造 使install DESTDIR=/home/user/Desktop/nodejs\u arm/nodebins

编译后的文件夹在/home/user/Desktop/nodejs\u arm/nodebins/home/root中生成

我将该文件夹压缩成一个tar文件并传输到AtmelSAMA5D36 arm板上

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”测试它时

“node-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
(gdb)运行
启动程序:/usr/bin/node
[已启用使用libthread_db的线程调试]
使用主机libthread_db library“/lib/libthread_db.so.1”。
程序收到信号信号,指令非法。
0xb6edfec0位于/usr/lib/libcrypto.so.1.0.0中的_armv7_neon_probe()
(gdb)c
持续的。
程序收到信号信号,指令非法。
/usr/lib/libcrypto.so.1.0.0中的_armv7_tick()中的0xb6edfec8
(gdb)c
持续的。
[新螺纹0xb65ca4c0(LWP 3774)]
[新螺纹0xb67ca4c0(LWP 3773)]
[新螺纹0xb69ca4c0(LWP 3772)]
[新螺纹0xB6BCA4 C0(LWP 3771)]
程序收到信号信号,指令非法。
v8::internal::ComputeFlagListHash()中的0x0054b504()
(gdb)c
持续的。
[线程0xb65ca4c0(LWP 3774)已退出]
[线程0xb67ca4c0(LWP 3773)已退出]
[线程0xb69ca4c0(LWP 3772)已退出]
[线程0xb6bca4c0(LWP 3771)已退出]
程序以信号SIGILL终止,指令非法。
该程序不再存在。
(gdb)q
#gdb节点-e0
GNU gdb(gdb)7.9.1
版权所有(C)2015免费软件基金会。
许可证GPLv3+:GNU GPL版本3或更高版本
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不存在任何担保。键入“显示复制”
和“显示保修”了解详细信息。
此GDB配置为“arm buildroot linux uclibcgnueabihf”。
键入“显示配置”以获取配置详细信息。
有关错误报告说明,请参阅:
.
在线查找GDB手册和其他文档资源,网址为:
.
要获得帮助,请键入“帮助”。
键入“apropos word”以搜索与“word”相关的命令。。。
正在从节点读取符号。。。
(gdb)
(gdb)运行
启动程序:/usr/bin/node
[已启用使用libthread_db的线程调试]
使用主机libthread_db library“/lib/libthread_db.so.1”。
[新螺纹0xb64f84c0(LWP 14382)]
[新螺纹0xb66f84c0(LWP 14381)]
[新螺纹0xb68f84c0(LWP 14380)]
[新螺纹0xb6af84c0(LWP 14379)]
程序收到信号信号,指令非法。
v8::internal::ComputeFlagListHash()中的0x0054b504()
(gdb)
(gdb)运行
正在调试的程序已启动。
从头开始?(y或n)y
启动程序:/usr/bin/node
[已启用使用libthread_db的线程调试]
使用主机libthread_db library“/lib/libthread_db.so.1”。
[新螺纹0xb653d4c0(LWP 14531)]
[新螺纹0xb673d4c0(LWP 14530)]
[新螺纹0xb693d4c0(LWP 14529)]
[新螺纹0xb6b3d4c0(LWP 14528)]
程序收到信号信号,指令非法。
v8::internal::ComputeFlagListHash()中的0x0054b504()
(gdb)程序收到信号信号,指令非法。
未定义的命令:“程序”。试试“帮助”。
v8::internal::ComputeFlagListHash()中的(gdb)0x0054b504
未定义的命令:“0x0054b504”。试试“帮助”。
(gdb)英国电信
#v8::internal::ComputeFlagListHash()中的0 0x0054b504()
#v8::internal::v8::InitializeOncePerProcessImpl()中的1 0x007b8a54
#v8::base::CallOnceImpl(int*,void(*)(void*),void*)()
#v8::internal::v8::Initialize()中的3 0x007b8ba8()
#v8::v8::Initialize()中的4 0x0028fc74()
#节点中的5 0x00897a34::开始(int,char**)()
#来自/lib/libc.so.1的6 0xb6b95634 in_uuuuclibc_umain()
#7 0x00000000英寸??()
反向跟踪停止:上一帧与此帧相同(堆栈损坏?)
(gdb)q

我们试图通过SAMA5D31上的buildroot工具链使用nodejs 6.1.0时遇到了类似的问题,并遇到了相同的“非法指令”问题。最后,我们切换到使用版本0.10.45,该版本包含在用于较旧处理器(armv5和较旧版本)的buildroot中


在对此进行故障排除时,问题似乎出现在node使用的NodeJ和OpenSSL库中,其中编译的代码试图使用Neon指令进行浮点操作。SAMA5D3X处理器报告为armV7,但没有Neon FPU。然而,nodejs(以及我们的openssl)正试图使用Neon指令,因为它假设它拥有一个armV7。在nodejs能够处理非Neon armV7之前,最好的选择是使用node的0.10.40或0.10.45版本,直到可以解决这个问题。或者自己修改node的构建配置以处理非Neon armV7。

您可以输出node--v8选项的前几行输出结果吗--v8选项如下目标arm v7 vfp3 hard armV7=1 vfp3=1 VFP32DREGS=1 Neon=0 SUDIV=0 UNALIGNED\u accesss=1 MOVW\u MOVT\u IMMEDIATE\u LOADS=0 USE\u EABI\u HARDFLOAT=1dYou有没有想过如何解决这个问题?@MohammedArif有时问题是安装
node
npm
不是正确的版本,如果这提供了一些提示,那么您也可以尝试清理
npm