c++ - 为什么在我的 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
为什么会这样?或者我该如何解决这个问题?
解决方案
您不想直接在/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
这意味着一切都会自动运行。但这将是一个不同的讨论。
推荐阅读
- java - 如何从回收视图中获取按钮单击时的文本视图?
- github - 对于使用 VS Code 的远程开发,当我执行 GIT 克隆时,存储库如何到达远程计算机?
- ruby-on-rails - RSpec 控制器测试 - ActionController::UnfilteredParameters:无法将未经许可的参数转换为哈希
- sql - 如何编写条件以执行 for 循环不返回任何行的操作
- reactjs - redux-persist 中没有更新新的 store 结构
- javascript - Array.push 不是函数,在从 localstorage 检索的数组上
- css - 如何在不按 CTRL + F5 的情况下使 Elementor 更改可见?
- python - 当另一个线程上的函数完成python时停止一个线程
- java - 使用 ArgumentsMatchers 和 Mockito 模拟类类型参数 - Mongo 聚合 Spring Webflux
- javascript - html5视频开始播放时如何运行函数