在MSYS2编译C++程序时遇文件不存在及权限拒绝问题求助
MSYS2编译C++程序的问题解决步骤
一、搞定"文件找不到"的报错
MSYS2是类Unix环境,直接用Windows的C:\格式路径容易出问题,尤其是路径带空格的时候,按下面的方法来:
- 转换路径格式:把Windows路径改成MSYS2的写法,比如
C:\Users\myusername\OneDrive\Desktop\C++ Programming 21_11_2023要改成/c/Users/myusername/OneDrive/Desktop/C++ Programming 21_11_2023,然后用引号包裹整个路径避免空格干扰:g++ "/c/Users/myusername/OneDrive/Desktop/C++ Programming 21_11_2023/21nov2023program.cpp" -o 21nov.exe - 更省心的方式:切换到代码目录:先cd到代码所在的文件夹,之后编译直接用文件名就行:
注意:输出文件后缀用cd "/c/Users/myusername/OneDrive/Desktop/C++ Programming 21_11_2023" g++ 21nov2023program.cpp -o 21nov.exe.exe,别用.cpp,不然会和源文件搞混,还容易触发权限问题。
二、解决"权限拒绝"的报错
出现这个问题大概率是这几个原因,逐个排查:
- 输出文件被占用:如果
21nov.exe(或者之前错误命名的21nov.cpp)正在被记事本、其他终端打开,先关掉这些程序再编译。 - OneDrive目录权限限制:OneDrive的同步机制可能会锁定文件,把代码复制到本地非同步目录(比如
C:\temp\cpp_test),再切换到该目录编译。 - 终端权限不够:右键点击MSYS2图标,选择"以管理员身份运行",再执行编译命令。
三、编译成功后运行程序
编译完成后,在MSYS2终端里直接敲下面的命令就能运行:
./21nov.exe
此时会输出Hello,说明程序运行正常。
内容的提问来源于stack exchange,提问作者user22960886
相关产品推荐
相关产品推荐

