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

为何使用MinGW跨目录编译的程序无法运行?

问题原因分析

操作复现

编译时执行的命令:

cd c:\mingw\bin
g++ -o c:\test\app.exe c:\test\app.cpp

错误现象

  • 编译成功生成c:\test\app.exe,但运行时系统弹窗提示:

This app can't run on your PC
To find a version for your PC, check with the software publisher.

  • 同时CMD窗口显示错误:Access is denied
  • 将该app.exe复制到MinGW\bin目录运行仍报错
  • 但把app.cpp复制到MinGW\bin目录编译后,生成的exe可正常运行

源代码

#include <stdio.h>
int main()
{
    printf("hello world");
    return 0;
}

核心原因

主要有两种可能的触发因素:

  • 目录安全标记拦截:c:\test目录可能被Windows安全机制标记为“不信任”(比如是下载目录、临时目录,或者权限设置严格),在该目录生成的app.exe会被系统自动打上可疑程序标记,即使复制到其他目录,这个安全标记依然存在,导致运行时被拦截,提示权限拒绝。而MinGW\bin属于系统识别的可信目录,在该目录下编译生成的exe不会被添加可疑标记,因此能正常运行。
  • 动态库链接路径问题:当在MinGW\bin目录编译其他目录的源码时,GCC链接器可能使用相对路径引用MinGW的运行时动态库(如libgcc_s_dw2-1.dll),生成的app.exe会记录这个相对路径,导致在非MinGW\bin目录运行时找不到依赖库;但将源码复制到MinGW\bin编译时,链接器会使用绝对路径或当前目录的库引用,生成的exe能正确加载依赖。不过这种情况复制exe到MinGW\bin应该能运行,所以更可能是第一种原因。

验证方法:右键点击c:\test\app.exe,选择“属性”,查看“常规”选项卡是否有“解除锁定”按钮,若有则点击解除锁定后再运行,大概率能正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:30:54