C++中LoadLibrary加载DLL失败问题排查与解决
Windows下LoadLibrary加载动态库在cmd/PowerShell中失败的解决方法
问题现象
- 使用以下C++代码加载动态库:
Handle = LoadLibrary(wstring2string(FullLibraryPath).c_str());
- 代码在CLion终端、Git Bash中运行正常,但在cmd.exe和PowerShell中执行时,
LoadLibrary()返回NULL,错误提示:"The specified module could not be found."
无效尝试
最初判断为动态链接依赖问题,尝试在CMakeLists.txt中通过add_definitions添加静态编译参数:
if (CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") add_definitions("--static -lpthread -static-libgcc -static-libstdc++") endif () add_library(io SHARED libio/library.cpp ${SRC_FILES}) add_library(string SHARED libstring/library.cpp ${SRC_FILES}) add_library(array SHARED libarray/library.cpp ${SRC_FILES}) add_library(thread SHARED libthread/library.cpp ${SRC_FILES}) add_library(fs SHARED libfs/library.cpp ${SRC_FILES}) add_library(sys SHARED libsys/library.cpp ${SRC_FILES})
但该配置未能解决问题。
有效解决方案
修改动态库项目的CMakeLists.txt,在所有add_library或add_executable指令之前,添加以下配置设置共享链接器的静态编译标志:
if (CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") set(CMAKE_SHARED_LINKER_FLAGS "-static") endif ()
内容的提问来源于stack exchange,提问作者Jerry Chou
相关产品推荐
相关产品推荐

