求助解决collect2.exe: error: ld returned 1 exit status编译错误
编译C代码时遇到Permission Denied错误的解决
问题代码
#include <stdio.h> #include <stdlib.h> int main(void) { int size, i ,j, values[3][3]; setbuf(stdout,NULL); printf("Please enter the array limit "); scanf("%d",&size); printf("The entered values of array"); for(i=0; i<size; i++){ for(j=0; j<size; j++){ scanf("%d",&values[i][j]); } } printf("The entered values in matrix "); for(i=0; i<size; i++){ for(j=0; j<size; j++){ printf("%d",values[i][j]); } } return EXIT_SUCCESS; }
编译错误信息
20:42:57 **** Incremental Build of configuration Debug for project Func multi Dim Practice **** Info: Internal Builder is used for build gcc -o "Func multi Dim Practice.exe" "src\Func multi Dim Practice.o" C:/Program Files/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot open output file Func multi Dim Practice.exe: Permission denied collect2.exe: error: ld returned 1 exit status
核心原因
链接器ld.exe无法写入输出的可执行文件,提示权限被拒绝,通常是文件被占用、权限不足或路径解析问题导致。
解决步骤
- 关闭后台运行的程序实例:打开任务管理器,找到
Func multi Dim Practice.exe进程并结束,重新编译。 - 检查输出文件夹权限:确保项目所在文件夹允许当前用户写入,右键文件夹→属性→安全选项卡,确认修改权限已启用。
- 移除文件名中的空格:将项目名和输出文件名改为无空格格式(如
FuncMultiDimPractice),避免路径解析错误。 - 清理旧编译文件:手动删除项目目录下的
.exe和.o文件,重新执行编译。 - 以管理员身份运行IDE:如果项目存放在系统保护目录(如
C:\Program Files),右键IDE选择“以管理员身份运行”后再编译。
额外代码优化提示
- 字符串换行问题:代码中
printf的字符串直接换行会导致编译警告,应使用\n实现换行,例如printf("Please enter the array limit\n");。 - 数组越界风险:
values是固定的3x3数组,若输入的size大于3会触发数组越界,建议添加范围判断,或使用malloc动态分配二维数组。
内容的提问来源于stack exchange,提问作者Ashwini Kumar
相关产品推荐
相关产品推荐

