Почему clang ++ не может скомпилироваться на Mac под Mavericks, кроме как с помощью sudo?

После последнего обновления программного обеспечения на моем 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. Благодарим Петеша за решение.

5

Решение

Вы должны сидеть в каталоге, который не доступен для записи вашему пользователю. смотреть на pwd а также ls -ld . чтобы увидеть, где вы находитесь и какие разрешения есть. Попробуйте также создать пустой файл touch foo.txt в том же каталоге, где вы запустили Clang.

3

Другие решения

Скорее всего, ответ — вы используете clang ++, когда ваш текущий рабочий каталог не тот, к которому у вас есть права на запись.

Попробуйте убедиться, что каталог принадлежит вам / доступен для записи, например, запустив:

sudo chown -R `whoami` .

(Обратите внимание, это может быть неуместно в зависимости от который каталог, в котором вы находитесь).

В некоторых случаях это происходит после обновления / обновления OSX в проектах, которые раньше были не нужны.

4

Вероятно, вы запустили gcc от имени пользователя root (через sudo), и, таким образом, созданный файл a.out принадлежит пользователю root. Так что просто удалите его, и проблема исчезнет.

Почему ты это сделал? К сожалению, xcode заставляет вас работать таким образом, чтобы согласиться с лицензионным соглашением!

3
По вопросам рекламы [email protected]