LinuxForum.Fans
Тема

Проблема с компиляцией

Автор: kreygen 13 сообщений 3612 просмотров
#202263

Здравствуйсте.
Чувствую себя совсем дураком, но не выходит откомпилировать программу. Изначально она писалась под виндой и использует кроссплатформенные библиотеки, в общем-то, состоящие только из openGL и openGLUT. Работаю в eclipse. Скопировав на линукс, настроил всё, прописал пути, компилирую. Появляется фалик... и при запуске упорно пишет:

Не удалось показать «/fat32/life_story_workspace/life_story/linux2/life_story».
Для файлов типа «исполняемый» не установлено каких-либо приложений.
Найти подходящее приложение для открытия этого файла?

Писал свой makefile, то же самое. Думал, может библиотеки битые, но опенгл примеры разные из инета прекрасно компилируются. Половину дня убил, так и не смог понять, в чём проблема. ЗЫ: знания линукса довольно посредственные. ОС: openSuSe 11.4. Программа на си.

#202267
kreygen написал:
Не удалось показать «/fat32/life_story_workspace/life_story/linux2/life_story».
Для файлов типа «исполняемый» не установлено каких-либо приложений.

Вы чего его "двойным кликом" что-ли запускаете?
Система вам и пишет что ничего ей не предписано при таком обращении с исполняемыми файлами делать.

В консоли попробуйте запустить собранный бинарник.

#202316

Тоже бесполезно:

hladov@linux-qldk:/fat32/life_story_workspace/life_story/linux> ./life_story
bash: ./life_story: Отказано в доступе

#202319
kreygen написал:

bash: ./life_story: Отказано в доступе

Проверьте права на файл

#202321

Проверьте права на файл

И правда, владелец root. Но я же компилирую из под обычного пользователя, почему он права вдруг такие выставил?

#202323

Всё, разобрался. Надо было перенести все файлы в личную папку пользователя, тогда он присваивает бинарнику права пользователя. Спасибо большое.

#202981

Вдогонку:
kreygen,
Чтобы файлы стали исполняемыми их совсем необязательно таскать по диску. Вот вам пример: от юзера запускаются всевозможные команды, файлы которых (скрипты, линки или бинарники) лежат у рута и юзеру вовсе не принадлежат.

Для разрешения исполнения:

text
chmod +x файл

Удач в программировании.

#203163

вдогонку догонки:
если файлы на fat разделе, который монтируестя без прав на исполнение или вообще на разделе. который монтируется с -o noexec, то с этого раздела действительно ничего не получится запустить. выход - или копировать, или перемонтировать его правильно.

#203219

Fat-Zer,
Вот хотел даже спасибо сказать :)
Но подмонтировал флешку с FAT - создал там скрипт,- права выставляются на исполнение, скрипт выполняется.

Но ежели noexec тогда конечно, но это не только на FAT тогда :)

#203231
redux написал:
Но подмонтировал флешку с FAT -  создал там скрипт,- права выставляются на исполнение, скрипт выполняется.

скрипту вообще пофиг ему хватит и прав на чтение, ибо он не сам "исполняется", а его исполняет интерпретатор.
да и вообще как вы на фате "выставили права на исполнение"?

#203330

Fat-Zer, Я тут поразмышлял, ваше замечание(про права на весь раздел) здравое, ибо если сборка шла во вменяемой стреде, то права на исполнение должны были быть у файла автоматически (по крайней мере, если что собираю компилятром- права ставятся сами). То есть если у ТС был отказ по правам запуска= то очень возможно, что именно весь раздел был подмонтирован с noexec- хотя не факт , а всего лишь предположение.

"скрипту вообще пофиг ему хватит и прав на чтение" - а вот с этим я категорически не согласен,- стопятьсот раз создвал себе, например для закачки список, а ля:

text
!#/bin/bash

<сюда команды>

И пока эхтому скрипту права на исполнение не пропишешь- пермиссион дениед будет(это в Дебиане, может у вас по-другому).

Далее по правам на FAT, у меня при монтировании. Ничего от дефолта не менял. Вот флешка:

text
Disk /dev/sdc: 1025 MB, 1025507328 bytes
255 heads, 63 sectors/track, 124 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System /dev/sdc1 1 124 995998+ 6 FAT16

Вот кусок вывода ls -l с корня флешки:
/

text
media/FLASH# ls -l
итого 83760
drwxr-xr-x  9 shaman root    16384 Окт 26 23:31 131
-rwxr-xr-x  1 shaman root     4297 Окт  2  2010 306px-X-client-libraries.svg.png
-rwxr-xr-x  1 shaman root  3236048 Июн  1  2010 3.09M_tech_support.flv.flv
-rwxr-xr-x  1 shaman root 12399145 Май 23  2008 35Scorpions - Wind Of Change.MP3
-rwxr-xr-x  1 shaman root  4027720 Июн  1  2010 3.84M_.flv
-rwxr-xr-x  1 shaman root   185408 Июл  6 12:46 489272.pdf
-rwxr-xr-x  1 shaman root      160 Окт 27 00:58 aget

-последний aget - как раз скрипт. Повторюсь, дефолтные настройки не менял.
Если инетересны какие конфиги, выложу.

Ответный вопрос:
Создайте текстовый файл, впишите туда
!#/bin/bash
sleep 10

Проверьте права или выставьте права на него chmod -x
и в консоли запустите
Неужели у вас он выполнпится, мне просто интересно, ибо у меня не так.

#203349

я про то, что fat плюёт на chmod:
[console]alexander@goblin-book /media/disk $ echo '#!/bin/bash' >> 1.sh
alexander@goblin-book /media/disk $ echo 'echo qwe' >> 1.sh
alexander@goblin-book /media/disk $ chmod a-x ./1.sh -v
права доступа «./1.sh» изменены на 0644 (rw-r--r--)
alexander@goblin-book /media/disk $ ls -l 1.sh
-rwxr-xr-x 1 alexander root 15 Ноя 6 14:48 1.sh
alexander@goblin-book /media/disk $ ./1.sh
qwe
[/console]
а со скриптом всегда можно сделать вот так:
[console]
alexander@goblin-book /media/disk $ mv ./1.sh /tmp
alexander@goblin-book /media/disk $ cd /tmp
alexander@goblin-book /tmp $ ./1.sh
qwe
alexander@goblin-book /tmp $ chmod a-x ./1.sh -v
права доступа «./1.sh» изменены на 0644 (rw-r--r--)
alexander@goblin-book /tmp $ ./1.sh
bash: ./1.sh: Отказано в доступе
alexander@goblin-book /tmp $ "$(head -1 ./1.sh|cut -d\! -f2)" ./1.sh
qwe
[/console]
по поводу монтирования: man mount - расскажет про fstab и man umask - про дефолтные значения.

#203370

Монтирую флешку с FAT (других устройств с fat не имею).
[console]mount -t auto /dev/sdc1 /mnt/data
cd /mnt/data
ls -l aget
-rwxr-xr-x 1 shaman root 160 Окт 27 00:58 aget[/console]
- права на выполнение присутствуют- Отличие от вашего Генту.
(aget -это скрипт на баше).

Далее, на запись всё же можно убрать,- то есть "плюёт" не на весь chmod
[console]chmod -w aget
g12:/mnt/data# ls -l aget
-r-xr-xr-x 1 shaman root 160 Окт 27 00:58 aget[/console]

С другой стороны, командой chmod -x права на выполнение не убираются.



За umask - спасибо, почитаю.
UPD: С вашей подачи знания расширил. :)

Хотя причина в этом конкретном вопросе может быть(?) именно в использовании флешки, а не винта.(В моих примерах).

Войдите или зарегистрируйтесь, чтобы ответить.