最近,我意识到大多数需要g++并使用Makefile的包都会使用相同的错误消息构建失败:make: g++ Permission denied
我发现这是因为CXX = g++正常工作,我不知道为什么在我的系统中它是不同的。
我用两个Makefile测试。第一项:
CXX=g++
all:
which $(CXX)
$(CXX) -v将导致
which g++
/usr/bin/g++
g++ -v
make: g++: Permission denied
make: *** [Makefile:5: all] Error 127第二个Makefile:
CXX=/usr/bin/g++
all:
which $(CXX)
$(CXX) -v会有正确的结果
which /usr/bin/g++
/usr/bin/g++
/usr/bin/g++ -v
Using built-in specs.
COLLECT_GCC=/usr/bin/g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror --with-build-config=bootstrap-lto --enable-link-serialization=1
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.1.0 (GCC) 在第一个Makefile中,which $(CXX)仍然导致/usr/bin/g++,这仍然是正确的,所以我不明白这里的问题是什么。
我的系统信息。我正在使用Arch,GCC在Makefile上工作得很好,这就是为什么我现在只知道g++有这个问题,所以我不知道这个问题是什么时候开始的。
请帮帮忙。谢谢。
发布于 2022-05-11 21:14:33
这几乎肯定是因为您的$PATH上的某个目录中有一个名为g++的目录,并且这个目录出现在/usr/bin之前。
因此,如果您从第一个目录开始运行ls -ld <dir>/g++对$PATH中的每个目录<dir>运行,其中一个将是一个目录:
drwxr-xr-x ... <dir>/g++
^ directory!!由于gnulib正在使用的gnulib库中有一个bug,它将处理路径上找到的目录与shell处理它的方式不同;它不会跳过它,就像shell会跳过它一样,而是尝试“运行”它。
https://stackoverflow.com/questions/72206393
复制相似问题