文件已存在但make报错“No such file or directory”,请求技术帮助
以下是几个常见的排查方向和解决方案:
验证二进制架构兼容性
执行file /auto/home/lsbuild/desktop-800003/go.1.19/usr/lib64/go/1.19/bin/go查看文件的CPU架构,再用uname -m确认当前系统架构。如果二进制是32位(比如i386)而系统是64位(x86_64),或者架构不匹配,会触发"找不到文件"的错误。检查动态链接库依赖
运行ldd /auto/home/lsbuild/desktop-800003/go.1.19/usr/lib64/go/1.19/bin/go查看该二进制依赖的动态库。如果有缺失的库(显示not found),或者系统中的glibc版本低于Go 1.19要求的版本,会导致这种误导性报错。直接测试二进制可执行性
跳过Makefile,直接在终端执行:/auto/home/lsbuild/desktop-800003/go.1.19/usr/lib64/go/1.19/bin/go version确认是否能正常运行。注意:路径中的双斜杠
//不会影响Linux的路径解析,系统会自动处理为单斜杠,因此这不是问题根源。排查Makefile变量展开问题
修改Makefile的build目标,添加变量打印,确认命令是否被错误修改:build: echo "CGO_LDFLAGS: $(CGO_LDFLAGS)" echo "CGO_CXXFLAGS: $(CGO_CXXFLAGS)" echo "Full command: $(GO_ENV_VARS) $(GOCMD) -o $(PROJECT)" $(GO_ENV_VARS) $(GOCMD) -o $(PROJECT)检查
CGO_LDFLAGS/CGO_CXXFLAGS是否包含无效字符或错误路径,同时确保GO_ENV_VARS中的环境变量正确传递。检查权限与SELinux限制
用getfacl /auto/home/lsbuild/desktop-800003/go.1.19/usr/lib64/go/1.19/bin/go查看完整权限列表,确认当前用户有执行权限。另外,执行getenforce查看SELinux状态,如果是Enforcing,可临时执行setenforce 0关闭后重试,排查是否是SELinux阻止了执行。
内容的提问来源于stack exchange,提问作者Akshay CA

