После последнего обновления программного обеспечения на моем Mac я не могу скомпилировать и связать программу c ++ hello world без sudo.
Программа (helloworld.cpp):
#include <iostream>
int main(){
std::cout << "hello world\n";
return 0;
}
Вызов:
clang++ helloworld.cpp
Сбой с ошибкой:
ld: невозможно записать выходной файл: a.out для архитектуры x86_64
clang: error: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v для просмотра вызова)
Но если я сделаю это под sudo,
sudo clang++ helloworld.cpp
Нет проблем.
РЕДАКТИРОВАТЬ, сноваОтветом оказались не разрешения рабочего каталога, как предложили несколько человек, а разрешения, связанные с выходным файлом a.out моей программы hello world. Благодарим Петеша за решение.
Вы должны сидеть в каталоге, который не доступен для записи вашему пользователю. смотреть на pwd
а также ls -ld .
чтобы увидеть, где вы находитесь и какие разрешения есть. Попробуйте также создать пустой файл touch foo.txt
в том же каталоге, где вы запустили Clang.
Скорее всего, ответ — вы используете clang ++, когда ваш текущий рабочий каталог не тот, к которому у вас есть права на запись.
Попробуйте убедиться, что каталог принадлежит вам / доступен для записи, например, запустив:
sudo chown -R `whoami` .
(Обратите внимание, это может быть неуместно в зависимости от который каталог, в котором вы находитесь).
В некоторых случаях это происходит после обновления / обновления OSX в проектах, которые раньше были не нужны.
Вероятно, вы запустили gcc от имени пользователя root (через sudo), и, таким образом, созданный файл a.out принадлежит пользователю root. Так что просто удалите его, и проблема исчезнет.
Почему ты это сделал? К сожалению, xcode заставляет вас работать таким образом, чтобы согласиться с лицензионным соглашением!