Почему в моем Linux, когда текущий рабочий каталог принадлежит root (например, / usr / bin), я не могу связать какую-либо библиотеку при компиляции c ++? - PullRequest
0 голосов
/ 01 марта 2020

Если я напишу этот код и сохраню его как. cpp в ~ / Desktop

#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

Почему это происходит? или как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Спасибо за каждого. Я нашел причину. Это потому, что в / usr / bin есть исполняемая программа с именем 'array'. И когда CWD - это / usr / bin, компилятор рассматривает этот «массив» как заголовок c ++ <array>, поэтому ошибка компиляции. Затем мне нужно выяснить, почему компилятор по ошибке включает / usr / bin.

1 голос
/ 01 марта 2020

Вы не хотите генерировать код непосредственно в /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, что означает, что все работает автоматически . Но это было бы другое обсуждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...