链接mongocxx/bsoncxx后程序启动失败(错误码-1073741515)求助
解决链接mongocxx/bsoncxx后程序无法启动(错误码0xC0000135)的问题
这个错误码0xC0000135是Windows系统的典型提示:程序找不到运行所需的动态链接库(DLL)。你链接的是SHARED类型的动态库,虽然编译时通过了.lib导入库的链接,但运行时必须要有对应的.dll文件能被程序找到,否则就会出现这个启动失败的问题。结合你的CMake配置,我给你几个具体的修复方案:
1. 完善CMake中导入库的配置
你当前只设置了IMPORTED_IMPLIB(也就是编译时用的导入库),但没有指定动态库文件的路径。对于SHARED类型的导入库,需要补充IMPORTED_LOCATION属性,让CMake明确知道对应的DLL位置。修改后的CMake配置示例如下:
cmake_minimum_required(VERSION 3.15) project(enabler_app) set(CMAKE_CXX_STANDARD 17) # 定义驱动根目录,方便后续引用 set(MONGO_DRIVER_ROOT ${CMAKE_CURRENT_LIST_DIR}/mongo_db_driver) # 配置mongocxx动态库 add_library(MONGOCXX SHARED IMPORTED) set_target_properties(MONGOCXX PROPERTIES IMPORTED_IMPLIB ${MONGO_DRIVER_ROOT}/lib/mongocxx.lib # 这里替换成你实际的mongocxx.dll路径 IMPORTED_LOCATION ${MONGO_DRIVER_ROOT}/bin/mongocxx.dll # 如果是Debug模式,确保用的是Debug版本的库和DLL # IMPORTED_IMPLIB_DEBUG ${MONGO_DRIVER_ROOT}/lib/mongocxxd.lib # IMPORTED_LOCATION_DEBUG ${MONGO_DRIVER_ROOT}/bin/mongocxxd.dll ) # 配置bsoncxx动态库 add_library(BSONCXX SHARED IMPORTED) set_target_properties(BSONCXX PROPERTIES IMPORTED_IMPLIB ${MONGO_DRIVER_ROOT}/lib/bsoncxx.lib # 替换成实际的bsoncxx.dll路径 IMPORTED_LOCATION ${MONGO_DRIVER_ROOT}/bin/bsoncxx.dll # Debug模式对应配置 # IMPORTED_IMPLIB_DEBUG ${MONGO_DRIVER_ROOT}/lib/bsoncxxd.lib # IMPORTED_LOCATION_DEBUG ${MONGO_DRIVER_ROOT}/bin/bsoncxxd.dll ) # 添加头文件目录 include_directories( ${MONGO_DRIVER_ROOT}/include/mongocxx/v_noabi ${MONGO_DRIVER_ROOT}/include/bsoncxx/v_noabi ) # 添加可执行文件并链接库 add_executable(enabler_app main.cpp) target_link_libraries(enabler_app MONGOCXX BSONCXX)
2. 确保运行时能找到所有依赖DLL
除了mongocxx.dll和bsoncxx.dll,它们还依赖MongoDB C驱动的核心DLL(比如mongoc-1.0.dll、bson-1.0.dll),这些文件通常也在你的驱动编译输出目录里。你有两种方式让程序找到它们:
- 临时方案:把所有相关DLL所在的目录添加到系统
PATH环境变量中,然后重启CLion让环境变量生效。 - 持久化方案:在CMake中添加自定义命令,自动把DLL复制到可执行文件的输出目录,这样每次构建后程序都能直接找到依赖:
# 在target_link_libraries之后添加 add_custom_command(TARGET enabler_app POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${MONGO_DRIVER_ROOT}/bin/mongocxx.dll ${MONGO_DRIVER_ROOT}/bin/bsoncxx.dll ${MONGO_DRIVER_ROOT}/bin/mongoc-1.0.dll ${MONGO_DRIVER_ROOT}/bin/bson-1.0.dll $<TARGET_FILE_DIR:enabler_app> )
3. 检查编译模式一致性
一定要注意:你的项目编译模式(Debug/Release)必须和你编译mongocxx/bsoncxx时的模式完全一致。如果你编译驱动时用的是Debug模式,那项目也得用Debug模式构建;反之亦然。混合模式会导致各种奇怪的运行错误,包括这个启动失败问题。
内容的提问来源于stack exchange,提问作者user12797847
相关产品推荐
相关产品推荐

