运行CMake生成的.exe文件时出现入口点找不到错误
MinGW编译后运行提示文件系统入口点找不到
问题描述
使用cmake .. -G "MinGW Makefiles"编译、mingw32-make.exe构建均正常,但运行生成的anamorph_movie.exe时,Windows弹出错误:过程入口点_ZNKSt10filesystem7_cxx1118directory_iteratordeEv无法在该动态链接库中找到。
已尝试的无效操作
- 修改编译/链接标志
- 添加
include_directories路径 - 将exe移至
C:\msys64\mingw64\bin目录 - 调整系统Path变量顺序
- 执行
pacman -Suy更新系统
当前CMakeLists.txt代码
cmake_minimum_required(VERSION 3.1) project(anamorph_movie) SET(GCC_COVERAGE_COMPILE_FLAGS "-static-libgcc") SET(GCC_COVERAGE_COMPILE_FLAGS "-static-libgcc++") # Set the C++ standard to C++17 set(CMAKE_CXX_STANDARD 17) # include the vcg library include_directories(./lib/vcglib-main/) # include the eigen library include_directories(./lib/vcglib-main/eigenlib) include_directories(C:/msys64/mingw64/bin) include_directories(C:/msys64/mingw64/lib) # Add your executable and source files here add_executable(${PROJECT_NAME} anamorph_video_commandline.cpp) target_link_libraries(${PROJECT_NAME} stdc++fs)
解决方案
核心原因
- 编译标志设置错误:两次
SET赋值导致-static-libgcc被覆盖,未生效 std::filesystem链接方式问题:MinGW新版本中std::filesystem已合并到libstdc++,无需单独链接stdc++fs;旧版本则需要静态链接避免动态库依赖- 无效路径添加:
mingw64/bin和mingw64/lib是库文件路径,不是头文件路径,添加到include_directories完全没用
修复步骤
修正编译标志:
合并静态链接标志,确保两个参数都生效,推荐用更规范的CMake写法:target_compile_options(${PROJECT_NAME} PRIVATE -static-libgcc -static-libstdc++)调整
std::filesystem链接:- 若你的MinGW版本≥8.0,直接删除
target_link_libraries(${PROJECT_NAME} stdc++fs)这一行 - 若版本较旧,改为静态链接
stdc++fs:target_link_libraries(${PROJECT_NAME} -static stdc++fs)
- 若你的MinGW版本≥8.0,直接删除
移除无效路径:
删除include_directories(C:/msys64/mingw64/bin)和include_directories(C:/msys64/mingw64/lib)两行
修正后的完整CMakeLists.txt
cmake_minimum_required(VERSION 3.1) project(anamorph_movie) # 强制启用C++17标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 引入vcg和eigen头文件 include_directories(./lib/vcglib-main/) include_directories(./lib/vcglib-main/eigenlib) # 添加可执行文件 add_executable(${PROJECT_NAME} anamorph_video_commandline.cpp) # 静态链接gcc和stdc++库,消除运行时依赖 target_compile_options(${PROJECT_NAME} PRIVATE -static-libgcc -static-libstdc++) # 旧版MinGW兼容(不需要可删除) # target_link_libraries(${PROJECT_NAME} -static stdc++fs)
验证操作
删除原build目录,重新执行编译构建:
mkdir build && cd build cmake .. -G "MinGW Makefiles" mingw32-make.exe
运行生成的anamorph_movie.exe即可解决入口点错误。
内容的提问来源于stack exchange,提问作者Cosmo
相关产品推荐
相关产品推荐

