C++ 为什么在我的Linux中,当当前工作目录为root所有(例如/usr/bin)时,在编译c++;?

C++ 为什么在我的Linux中,当当前工作目录为root所有(例如/usr/bin)时,在编译c++;?,c++,linux,C++,Linux,如果我写下这段代码并在~/Desktop上保存为.cpp #包括 int main(){} 然后输入到bash: cd/usr/bin g++-g~/Desktop/a.cpp-o~/Desktop/a 然后g++将输出大量混乱的错误代码。 我发现原因是因为它没有链接XX.so库的权限 但如果我添加一个“sudo”,或将CWD设置为用户拥有的路径,g++将正常工作,如下所示: sudo g++-g~/Desktop/a.cpp-o~/Desktop/a 或 cd~/桌面 g++-g~/De

如果我写下这段代码并在~/Desktop上保存为.cpp

#包括
int main(){}
然后输入到bash:

cd/usr/bin
g++-g~/Desktop/a.cpp-o~/Desktop/a
然后g++将输出大量混乱的错误代码。 我发现原因是因为它没有链接XX.so库的权限

但如果我添加一个“sudo”,或将CWD设置为用户拥有的路径,g++将正常工作,如下所示:

sudo g++-g~/Desktop/a.cpp-o~/Desktop/a

cd~/桌面
g++-g~/Desktop/a.cpp-o~/Desktop/a

为什么会发生这种情况?或者我如何解决这个问题?

您不想直接在
/usr/bin
中生成代码

您可以在用户文件夹中生成代码,也可以创建一个名为
cppwork
的子目录或类似的子目录

cd
mkdir cppwork
cd cppwork
g++ -g a.cpp -o a
在目录中编译后,使用
install
复制文件,如果有调试,也会进行剥离(即
-g
说明保留调试信息剥离不是强制性的)

如您所见,我使用
sudo
的地方是使用
install
命令


话虽如此,我从不直接使用它们。现在有一天,我使用
cmake
,这意味着一切都是自动进行的。但这将是一个不同的讨论。

您不想直接在
/usr/bin
中生成代码

您可以在用户文件夹中生成代码,也可以创建一个名为
cppwork
的子目录或类似的子目录

cd
mkdir cppwork
cd cppwork
g++ -g a.cpp -o a
在目录中编译后,使用
install
复制文件,如果有调试,也会进行剥离(即
-g
说明保留调试信息剥离不是强制性的)

如您所见,我使用
sudo
的地方是使用
install
命令


话虽如此,我从不直接使用它们。现在有一天,我使用
cmake
,这意味着一切都是自动进行的。但那将是一个不同的讨论。

谢谢大家。我已经找到了原因。这是因为/usr/bin中有一个名为“array”的可执行程序。当CWD为/UR/BIN时,编译器将这个“数组”视为C++头<代码> <代码>,编译错误。
然后我需要找出编译器错误地包含/usr/bin的原因。

谢谢大家。我已经找到了原因。这是因为/usr/bin中有一个名为“array”的可执行程序。当CWD为/UR/BIN时,编译器将这个“数组”视为C++头<代码> <代码>,编译错误。
然后,我需要知道编译器为什么错误地包含/Ur/bin。

为什么CWD会影响编译工作?当使用CLAN+++时,它是相同的,输出大量凌乱的代码。我不确定你会考虑什么“修复”,但是你可能想试试<代码> G++G~/Table/A.CPP-O~/Table/A < /代码>。例如,不将输出写入您没有必要权限的目录。这是标准的unix行为<代码>/usr/bin是只读的,除非您是root用户。您无法将文件复制到该文件夹中,更不用说输出二进制文件了
sudo
让你在命令的生命周期中都是root用户抱歉,我在帖子中漏掉了完整的路径,我没有在/ust/bin中创建文件,实际上我输入的命令是g++~/Desktop/a.cpp-o~/Desktop/a为什么CWD会影响编译工作?当使用clang++时,它是一样的,输出大量凌乱的代码。我不确定你会考虑什么“修复”,但是你可能想试试<代码> G++-G~/Table/A.CPP-O~/Table/A/<代码>。例如,不将输出写入您没有必要权限的目录。这是标准的unix行为<代码>/usr/bin是只读的,除非您是root用户。您无法将文件复制到该文件夹中,更不用说输出二进制文件了
sudo
让你在命令的生命周期中都是root用户抱歉,我在帖子中遗漏了完整路径,我没有在/ust/bin中创建文件,实际上我输入的命令是g++~/Desktop/a.cpp-o~/Desktop/aI。抱歉,我在问题中遗漏了完整路径。我输入到bash的命令是正确的,我没有在/usr/bin中创建文件,这是我实际输入的:``/usr/bin/g++~/Desktop/xx/xx.cpp-o~/Desktop/xx/xx``@xxhxx,哦!那么这可能并不直接适用。
cd/usr/bin
将不起作用。请注意,这是您可以在问题中编辑的内容,以明确您没有试图写入
/usr/bin
。很抱歉,我在问题中遗漏了完整路径。我输入到bash的命令是正确的,我没有在/usr/bin中创建文件,这是我实际输入的:``/usr/bin/g++~/Desktop/xx/xx.cpp-o~/Desktop/xx/xx``@xxhxx,哦!那么这可能并不直接适用。
cd/usr/bin
将不起作用。请注意,这是您可以在问题中编辑的内容,以明确您没有试图写入
/usr/bin
。哦,这是有道理的。默认情况下,编译器首先尝试将
/
作为
#include
搜索路径。哦,这很有意义。默认情况下,编译器首先尝试将
/
作为
#include
搜索路径。