运行简单的 nodejs 脚本的 ELF 标头无效

Bra*_*don 5 linux ubuntu node.js

我正在尝试在 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');
Run Code Online (Sandbox Code Playgroud)

我已经通过此处找到的说明安装了 NodeJs 。这是我从该链接中遵循的摘录:

选项 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
Run Code Online (Sandbox Code Playgroud)

我已经卸载并重新安装了 node 以及 npm,但它仍然不起作用......我正在运行 Ubuntu 14.04 LTS 64 位。

更多信息:

我决定从源代码构建,然后masterhttps://github.com/nodejs/node.git克隆并构建它然后运行相同的脚本,这是我得到的错误:

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
Run Code Online (Sandbox Code Playgroud)

显然,这是相同的错误,但堆栈跟踪不同。

是什么赋予了?

Bra*_*don 7

好吧,这很尴尬(实际上,有点令人气愤)。

无效的 ELF 标头

只是 NodeJS 告诉我文件扩展名不正确的一种奇特方式。

我跑了

mv test.node test.js

重命名文件,现在它可以工作了。由于错误消息,那真是令人讨厌的两天浪费。

robertklep 在评论中的进一步解释:

文件 extension.node 对 Node 有特殊意义,因为它应该用于本地(编译)插件。“ELF header”部分指的是动态加载器(process.dlopen()在错误的堆栈跟踪中)如何识别文件是编译的插件。由于您提供的是JS文件,因此识别失败,因此“无效的ELF标头”。这并没有说明 JS 文件,它在您重命名后运行良好。