首页 > 解决方案 > 为什么在我的 Linux 中,当当前工作目录由 root 拥有(例如 /usr/bin)时,我在编译 c++ 时无法链接任何库?

问题描述

如果我编写此代码并在 ~/Desktop 中保存为 a.cpp

#include <memory>
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 ~/Desktop
g++ -g ~/Desktop/a.cpp -o ~/Desktop/a

为什么会这样?或者我该如何解决这个问题?

标签: c++linux

解决方案


您不想直接在/usr/bin.

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

cd
mkdir cppwork
cd cppwork
g++ -g a.cpp -o a

一旦你在你的目录中编译,然后你复制文件使用install它也将负责剥离调试,如果有的话(即-g说要保留调试信息——剥离不是强制性的)。

sudo install -s a /usr/bin/a

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

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


推荐阅读