运行 js 文件出现 Error: A dynamic link library (DLL) initialization routine failed 错误

概要

既上次出现 Error: The specified module could not be found. 问题之后,又出现了新的问题

  • process.dlopen 错误处理

运行 js 文件时会出现

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

Error: A dynamic link library (DLL) initialization routine failed.

原因

CMakeLists.txt 文件中添加内存泄漏检测的库(asan)时,只注释了 list(APPEND EXTRA_LIBS clang_rt.asan),没有将其他依赖的选项也注释掉;
导致在运行时仍然会提示有 DLL 未初始化成功

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer -fsanitize=address")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=address")
  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=address")

  add_definitions(-D_DEBUG)
  #list(APPEND EXTRA_LIBS clang_rt.asan)
endif()

解决方法

set(xxx) 这三行都注释掉,就不会出现问题了

小结

这个问题其实是很奇怪的,在出现 DLL 初始化失败时,第一反应是第三方依赖库没添加成功,但是这次是没有依赖第三方库的,所以最终才排查到 asan 也算是“第三方库”
后面在添加任何库,不管是系统库还是自己弄得三方库,都要确保在添加了 CMAKE_SHARED_LINKER_FLAGS 参数后,同时添加库的名字或者路径

你可能感兴趣的:(javascript,开发语言,ecmascript,前端)