我试图在Ubuntu 14.04上运行一个简单的nodejs脚本,其内容如下:
http = require('http');
http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain' });
res.end('Hello World \n');
}).listen(80, '127.0.0.1');
我已通过说明found here安装了NodeJ。以下是我从该链接中摘录的摘录:
选项2:使用Ubuntu软件包管理器安装Node.js
要安装Node.js,请在终端中键入以下命令:
sudo apt-get install nodejs
然后安装Node包管理器,npm:
sudo apt-get install npm
为节点创建符号链接,因为许多Node.js工具使用此名称来执行。
sudo ln -s /usr/bin/nodejs /usr/bin/node
我做到了,确认已安装了两个软件包:
但我无法使用我的.node文件而不抱怨此错误:
user@host:/var/www/html/nodetest$ node test.node
module.js:356
Module._extensions[extension](this, filename);
^
Error: /var/www/html/nodetest/test.node: invalid ELF header
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:945:3
我已经卸载并重新安装了节点以及npm,但它仍然无法工作......我正在运行Ubuntu 14.04 LTS 64位。
更多信息:
我决定从源代码构建并在从https://github.com/nodejs/node.git克隆master
并构建它然后运行相同的脚本后,这就是我得到的错误:
user@host:/var/www/html/nodetest$ ~/node/node test.node
module.js:600
return process.dlopen(module, path._makeLong(filename));
^
Error: /var/www/html/nodetest/test.node: invalid ELF header
at Object.Module._extensions..node (module.js:600:18)
at Module.load (module.js:490:32)
at tryModuleLoad (module.js:449:12)
at Function.Module._load (module.js:441:3)
at Module.runMain (module.js:607:10)
at run (bootstrap_node.js:414:7)
at startup (bootstrap_node.js:139:9)
at bootstrap_node.js:529:3
显然,使用不同的堆栈跟踪会出现同样的错误。
是什么给出了?
答案 0 :(得分:3)
Welp,这很令人尴尬(实际上,有点令人愤怒)。
无效的ELF标题
只是NodeJS的一种奇特方式,告诉我文件的扩展名不正确。
我跑了
mv test.node test.js
重命名文件,现在可以正常工作了。由于错误的错误消息,这是两天非常烦人的浪费。
robertklep在评论中的进一步解释:
文件extension.node对Node有特殊意义,正如它所假设的那样 用于本机(编译)插件。 " ELF标题"部分是指动态加载器如何 (错误的堆栈跟踪中的
process.dlopen()
)标识a file是一个已编译的插件。因为你正在为它提供一个JS文件,所以 识别失败,因此"无效的ELF标题"。那不是说 关于JS文件的任何事情,在你之后工作得很好 重命名了。