Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Не могу скомпилировать файл cpp


Автор: Alexey91 30.9.2011, 14:23
Здравствуйте!

Есть файл a.cpp

Выполняю   g++ -c a.cpp -o prog
./prog

Выдается   bash: ./prog отказано в доступе

В чем может быть дело?

Автор: newbee 30.9.2011, 15:00
Скорее всего раздел смонтирован с опцией noexec. Быстрое решение: перемонтировать его 
Код

mount /path/ -o remout,exec
Долговременное решение - поправить /etc/fstab, там поменять noexec на exec.

Автор: Alexey91 30.9.2011, 16:32
newbee Раньше (т.е. сегодня) компилировалось без проблем, и сегодня возникли проблемы
Первый способ не смог сделать, что за /path/, bash не находит его
Второй способ, сделал, но не помогло

Автор: newbee 30.9.2011, 16:47
Цитата(Alexey91 @  30.9.2011,  17:32 Найти цитируемый пост)
Первый способ не смог сделать, что за /path/, bash не находит его
Нужно было заменить /path на путь монтирования, я не знаю, что там у тебя, /, /home или что-то еще.

Цитата(Alexey91 @  30.9.2011,  17:32 Найти цитируемый пост)
Второй способ, сделал, но не помогло 
Перезагружался? И пусть меня побьют линупсоиды

Автор: bsa 30.9.2011, 16:48
Цитата(Alexey91 @  30.9.2011,  17:32 Найти цитируемый пост)
Первый способ не смог сделать, что за /path/, bash не находит его

Позвони системному администратору и реши этот вопрос с ним. Боюсь, уровня твоих знаний *nix недостаточно, чтобы безопасно решить проблему.

Добавлено через 1 минуту и 2 секунды
Цитата(newbee @  30.9.2011,  17:47 Найти цитируемый пост)
я не знаю, что там у тебя, /, /home или что-то еще.

/ - просто убило.  smile 
Ты себе как представляешь корень с опцией noexec?  smile 

Автор: newbee 30.9.2011, 17:05
Цитата(bsa @  30.9.2011,  17:48 Найти цитируемый пост)
Ты себе как представляешь корень с опцией noexec?
Лол я только что ради фана перемонтировала, теперь думаю, как отмонтироваться обратно)) А ваще noexec-корень может быть в чруте. Но можно ли его перемонтировать обратно... Блин, че делать то))

Автор: newbee 30.9.2011, 18:46
К счастью то был рабочий комп, а не пражский сервер. Надо было убегать, выключилась через sysrq. Через него же можно смонтировать корень в рид-онли, не знаю, сбросится ли при этом noexec-флаг. В следующий раз попробую)

Автор: Alexey91 30.9.2011, 18:46
Кому можно позвонить?

Добавлено через 5 минут и 3 секунды
newbee, Про первый способ
alex@alex-101:~/Рабочий стол/mzki/system_dh$ sudo mount ~ -o remout,exec
mount: невозможно найти /home/alex в /etc/fstab или /etc/mtab


Добавлено через 6 минут и 29 секунд
Да, перезагружался
Про второй способ: нашел в /etc/fstab
сделал в консоли chmod 666 /etc/fstab
нашел строку, где noexec, заменил на exec, перезагрузился, и ничего не поменялось(

Автор: bsa 3.10.2011, 00:31
Alexey91, верни все обратно. В том числе и режим доступа к fstab: sudo chmod 0644 /etc/fstab

Во-первых, проверь, что у тебя за файл создался. для этого выполни в каталоге с экзешником: ls -l 
должна быть строчка такого вида:
Код
rwxr-xr-x ... prog
Если нет буковок x, то это значит, что права на запуск не заданы. Выполни chmod a+x prog. Если это не поможет, то тогда придется смотреть опции монтирования. Для этого необходимо выполнить команду: cat /proc/mounts. И искать строчку, во втором столбце которой находится /home или /home/alex. Далее проверяешь, есть ли в третьем столбце опция noexec. Если нет, то тогда проверяешь что за каталоги такие /home и /home/alex. Это это символические ссылки в другие места файловой системы, то необходимо проверять именно их.

Цитата(Alexey91 @  30.9.2011,  19:46 Найти цитируемый пост)
Кому можно позвонить?

Тому, кто устанавливал тебе систему, если это домашний комп. Или любому знакомому линуксоиду.

Автор: DRUID3 4.10.2011, 14:55
 smile сделай файл исполняемым в любом файловом менеджере...

Автор: bsa 5.10.2011, 13:57
Alexey91, я еще раз проверил твою строку компиляции. Ты компилируешь исходник, а не собираешь программу. Ключ -c приводит к тому, что компилятор делает объектный файл (обычно, с расширением *.o в *nix или *.obj под Windows). Но ты явно указал другое имя (ключ -o), поэтому расширение не добавилось. А так как объектный файл не является исполняемым, то и запустить его нельзя.
Быстрое решение: убери ключ -c

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)