节点外派错误的ELF类:ELFCLASS64

Node-expat wrong ELF class: ELFCLASS64

本文关键字:ELFCLASS64 ELF 错误 节点      更新时间:2023-10-16

我必须在构建机器上构建我的节点应用程序,然后将应用程序移动到目标机器上,因为我无法按照某些依赖项的要求在目标机器上编译 C。

我在 node-expat 上遇到了编译错误,它吐出了上述 ELF 类错误。我尝试在 32 位和 64 位版本的 linux 上重建我的节点应用程序,尽管当我将其移植到目标机器(据说是一台 64 位机器)时似乎解决了这个问题。

我在构建时收到这些错误:

node-gyp rebuild
make: Entering directory `/root/lumos/runner/node_modules/logbook/node_modules/simple-xmpp/node_modules/node-xmpp/node_modules/node-expat/build'
  CC(target) Release/obj.target/expat/deps/libexpat/lib/xmlparse.o
  CC(target) Release/obj.target/expat/deps/libexpat/lib/xmltok.o
../deps/libexpat/lib/xmltok.c:471:1: warning: missing initializer
../deps/libexpat/lib/xmltok.c:471:1: warning: (near initialization for ‘latin1_encoding_ns.isName2’)
../deps/libexpat/lib/xmltok.c:484:1: warning: missing initializer
../deps/libexpat/lib/xmltok.c:484:1: warning: (near initialization for ‘latin1_encoding.isName2’)
../deps/libexpat/lib/xmltok.c:504:1: warning: missing initializer
../deps/libexpat/lib/xmltok.c:504:1: warning: (near initialization for ‘ascii_encoding_ns.isName2’)
../deps/libexpat/lib/xmltok.c:517:1: warning: missing initializer
../deps/libexpat/lib/xmltok.c:517:1: warning: (near initialization for ‘ascii_encoding.isName2’)
../deps/libexpat/lib/xmltok.c:730:1: warning: missing initializer
../deps/libexpat/lib/xmltok.c:730:1: warning: (near initialization for ‘little2_encoding_ns.isName2’)
../deps/libexpat/lib/xmltok.c:749:1: warning: missing initializer
../deps/libexpat/lib/xmltok.c:749:1: warning: (near initialization for ‘little2_encoding.isName2’)
../deps/libexpat/lib/xmltok.c:762:1: warning: missing initializer
../deps/libexpat/lib/xmltok.c:762:1: warning: (near initialization for ‘internal_little2_encoding_ns.isName2’)
../deps/libexpat/lib/xmltok.c:775:1: warning: missing initializer
../deps/libexpat/lib/xmltok.c:775:1: warning: (near initialization for ‘internal_little2_encoding.isName2’)
../deps/libexpat/lib/xmltok.c:871:1: warning: missing initializer
../deps/libexpat/lib/xmltok.c:871:1: warning: (near initialization for ‘big2_encoding_ns.isName2’)
../deps/libexpat/lib/xmltok.c:890:1: warning: missing initializer
../deps/libexpat/lib/xmltok.c:890:1: warning: (near initialization for ‘big2_encoding.isName2’)
  CC(target) Release/obj.target/expat/deps/libexpat/lib/xmlrole.o
  AR(target) Release/obj.target/deps/libexpat/libexpat.a
  COPY Release/libexpat.a
  CXX(target) Release/obj.target/node_expat/node-expat.o
  SOLINK_MODULE(target) Release/obj.target/node_expat.node
  SOLINK_MODULE(target) Release/obj.target/node_expat.node: Finished
  COPY Release/node_expat.node
make: Leaving directory `/root/lumos/runner/node_modules/logbook/node_modules/simple-xmpp/node_modules/node-xmpp/node_modules/node-expat/build'

尽管它在我正在构建的机器上运行良好。当我尝试在目标计算机上运行它时,我得到以下结果:

module.js:356
  Module._extensions[extension](this, filename);
                               ^
Error: /root/lumos/runner/node_modules/logbook/node_modules/simple-xmpp/node_modules/node-xmpp/node_modules/node-expat/build/Release/node_expat.node: wrong ELF class: ELFCLASS64
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/root/lumos/runner/node_modules/logbook/node_modules/simple-xmpp/node_modules/node-xmpp/node_modules/node-expat/lib/node-expat.js:4:13)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
bash-4.1#

ELFCLASS64是否告诉我应用程序正在尝试调用 64 位库或 32 位库?我可以通过node-gyp/npm强制node-expat使用正确的库进行编译吗?

ELFCLASS64是否告诉我应用程序正在尝试调用 64 位库或 32 位库?

它告诉您 32 位进程试图dlopen 64 位库。

从您的描述中不清楚您如何调用 node ,但您在目标计算机上调用的二进制文件是 32 位二进制文件,无法加载 64 位共享库。

您需要改为调用 64 位二进制文件,或者在 32 位模式下构建库。