You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04下SWIG生成V8/Node.js模块报错:Module did not self-register

问题:SWIG生成Node.js模块运行报错「Module did not self-register」及node-gyp编译失败

环境信息

  • Ubuntu 22.04
  • SWIG Version 4.3.0
  • Node.js v20.14.0
  • V8 11.3.244.8-node.23

手动编译流程与运行报错

手动编译步骤及输出如下:

==== run Nodejs example
SWIG Version 4.3.0
node v20.14.0
v8   11.3.244.8-node.23
==== swig
swig -c++ -javascript -v8 -Isrc -o debug/node_example_wrap.cxx src/example.i
==== gcc 1
c++ -std=c++20 -c src/example.c -o debug/node_example.o
==== gcc 2
c++ -c -fPIC -I /usr/include/node -I /usr/local/share/swig/4.3.0 debug/node_example_wrap.cxx -o debug/node_example_wrap.o
==== c++ shared
c++ -std=c++20 debug/node_example.o debug/node_example_wrap.o -o debug/node_example.so
==== copy it
total 76
drwxrwxr-x 2 me me  4096 Oct 30 12:34 .
drwxrwxr-x 8 me me  4096 Oct 30 12:34 ..
-rwxrwxr-x 1 me me 65592 Oct 30 12:34 example.node

运行生成的模块时出现报错:

node:internal/modules/cjs/loader:1454
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^

Error: Module did not self-register: '/home/me/projects/web/cpp/swig-c/out/js/example.node'.
    at Module._extensions..node (node:internal/modules/cjs/loader:1454:18)
    at Module.load (node:internal/modules/cjs/loader:1208:32)
    at Module._load (node:internal/modules/cjs/loader:1024:12)
    at Module.require (node:internal/modules/cjs/loader:1233:19)
    at require (node:internal/modules/helpers:179:18)
    at Object.<anonymous> (/home/me/projects/web/cpp/swig-c/test.js:1:17)
    at Module._compile (node:internal/modules/cjs/loader:1358:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1416:10)
    at Module.load (node:internal/modules/cjs/loader:1208:32)
    at Module._load (node:internal/modules/cjs/loader:1024:12) {
  code: 'ERR_DLOPEN_FAILED'
}

Node.js v20.14.0

node-gyp编译报错

尝试使用node-gyp configure build编译时失败,报错如下:

$ node-gyp configure build
gyp info it worked if it ends with ok
gyp info using node-gyp@10.2.0
gyp info using node@20.14.0 | linux | x64
gyp info find Python using Python version 3.10.12 found at "/usr/bin/python3"

gyp info spawn /usr/bin/python3
gyp info spawn args [
gyp info spawn args '/home/me/.nvm/versions/node/v20.14.0/lib/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args 'binding.gyp',
gyp info spawn args '-f',
gyp info spawn args 'make',
gyp info spawn args '-I',
gyp info spawn args '/home/me/projects/web/cpp/swig-c/build/config.gypi',
gyp info spawn args '-I',
gyp info spawn args '/home/me/.nvm/versions/node/v20.14.0/lib/node_modules/node-gyp/addon.gypi',
gyp info spawn args '-I',
gyp info spawn args '/home/me/.cache/node-gyp/20.14.0/include/node/common.gypi',
gyp info spawn args '-Dlibrary=shared_library',
gyp info spawn args '-Dvisibility=default',
gyp info spawn args '-Dnode_root_dir=/home/me/.cache/node-gyp/20.14.0',
gyp info spawn args '-Dnode_gyp_dir=/home/me/.nvm/versions/node/v20.14.0/lib/node_modules/node-gyp',
gyp info spawn args '-Dnode_lib_file=/home/me/.cache/node-gyp/20.14.0/<(target_arch)/node.lib',
gyp info spawn args '-Dmodule_root_dir=/home/me/projects/web/cpp/swig-c',
gyp info spawn args '-Dnode_engine=v8',
gyp info spawn args '--depth=.',
gyp info spawn args '--no-parallel',
gyp info spawn args '--generator-output',
gyp info spawn args 'build',
gyp info spawn args '-Goutput_dir=.'
gyp info spawn args ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/home/me/projects/web/cpp/swig-c/build'
  CXX(target) Release/obj.target/debug/node_example.so/debug/node_example_wrap.o
../debug/node_example_wrap.cxx:1933:12: error: expected constructor, destructor, or type conversion before ‘(’ token
 1933 | NODE_MODULE(example, example_initialize)
      |            ^
make: *** [debug/node_example.so.target.mk:107: Release/obj.target/debug/node_example.so/debug/node_example_wrap.o] Error 1
make: Leaving directory '/home/me/projects/web/cpp/swig-c/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.<anonymous> (/home/me/.nvm/versions/node/v20.14.0/lib/node_modules/node-gyp/lib/build.js:216:23)
gyp ERR! System Linux 5.15.0-124-generic
gyp ERR! command "/home/me/.nvm/versions/node/v20.14.0/bin/node" "/home/me/.nvm/versions/node/v20.14.0/bin/node-gyp" "configure" "build"
gyp ERR! cwd /home/me/projects/web/cpp/swig-c
gyp ERR! node -v v20.14.0
gyp ERR! node-gyp -v v10.2.0
gyp ERR! not ok 

已尝试的无效方案

  • 参考同类问题的多种解决方案无效
  • 使用-javascript -node参数编译,结果相同
  • 尝试-javascript -jsc参数,陷入头文件与动态库依赖问题无法解决
  • 更换SWIG版本(4.0.2、4.2.1、4.3.0)均失败
  • 同一example.i文件在该系统及macOS下的Python、Ruby环境可正常工作

寻求有效的解决方案!


内容的提问来源于stack exchange,提问作者JohnA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 18:42:01