Не удается выполнить .out файлы, отказ в доступе

Я написал программу на C ++ и выполнил ее для создания файла a.out. Однако, когда я пытаюсь запустить его, я получаю отказ от прав. Я читал, что мы можем использовать sudo, но я не могу заставить его работать. Я использую что-то вроде sudo "./a.out", но это тоже не работает.

Edit:

Вот сообщение, которое я получаю, когда пытаюсь "./a .out ".

bash: ./a.out: Permission denied
10
задан 18 June 2012 в 23:06

39 ответов

просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.

15
ответ дан 26 July 2018 в 17:18

просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.

15
ответ дан 31 July 2018 в 10:49

просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.

15
ответ дан 31 July 2018 в 11:54

просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.

15
ответ дан 2 August 2018 в 03:27

просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.

15
ответ дан 4 August 2018 в 19:24

просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.

15
ответ дан 6 August 2018 в 03:35

просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.

15
ответ дан 7 August 2018 в 21:24

просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.

15
ответ дан 10 August 2018 в 09:42

просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.

15
ответ дан 13 August 2018 в 15:54
  • 1
    Этот ответ более интересен, просто добавьте, как я установил Ubuntu поверх Windows, и папка с именем была создана на диске C (установочный диск Windows). Этот диск отформатирован как FAT32. Может ли это иметь какое-то отношение к этому? – Shamim Hafiz 24 May 2011 в 10:55
  • 2
    Вы выполнили установку Wubi (был создан C:\Ubuntu). Это не должно быть проблемой, если вы не ставите файлы на «C: & quot; а не вашей установки Ubuntu. Если вы не используете Windows или имеете достаточно места на диске, я предлагаю установить Ubuntu на выделенный раздел. И снова NTFS / FAT32 НЕ поддерживает разрешения Linux, поэтому вы можете запускать sudo chown user file, chmod 755 file, это не сработает. Для этого вам действительно нужна файловая система EXT. – Lekensteyn 24 May 2011 в 13:08
  • 3
    В той же истории ни одна из файловых систем Windows не поддерживает разрешения файлов Linux. Вы должны поместить файлы в файловую систему с форматированием EXT. – Lekensteyn 24 May 2011 в 13:17
  • 4
    Так что просто работа над папкой, принадлежащей Ubuntu, должна делать трюк, не так ли? Я имею в виду, я не должен использовать папки, которые не являются частью структуры файловой системы Ubuntus? – Shamim Hafiz 24 May 2011 в 13:38
  • 5
    Точно, просто оставайтесь в ~, я создаю ~/projects и вкладываю в него все мои проекты, вы можете сделать то же самое. – Lekensteyn 24 May 2011 в 13:46

Обычно g++ дает разрешения на создание созданного файла. Если вы не передадите параметр -o, файл будет называться a.out.

Две возможные причины, по которым ваш файл не имеет установленного бита исполнения, с их решениями:

  1. Значение umask установлено на значение, подобное 0133, тем самым предотвращая установку бита выполнения. Решение: установите разрешения явно: chmod 755 a.out
  2. Файловая система, над которой вы работаете, не поддерживает разрешения Linux. Это может быть так, если вы помещаете файлы на флэш-диск с форматированием FAT32. Решение: либо создайте резервные копии файлов и отформатируйте их до ext2, либо смонтируйте диск с помощью fmask=0022 или umask=0022 (опуская fmask). Подробнее см. В разделе Параметры крепления для секции жира на странице руководства mount .

Для сценариев bash, которые не имеют выполнить бит, вы можете запустить bash file.sh. Такая функция существует для всех файлов с исполняемым контентом (скомпилированные файлы и файлы со строкой shebang #!/path/to/interpreter). Для запуска файлов без установленного бита используйте специальный файл /lib/ld-linux.so.2 (или /lib/ld-linux-x86-64.so.2 для приложений с 64 битами) для запуска такой программы:

/lib/ld-linux-x86-64.so.2 a.out
15
ответ дан 15 August 2018 в 22:44
  • 1
    Этот ответ более интересен, просто добавьте, как я установил Ubuntu поверх Windows, и папка с именем была создана на диске C (установочный диск Windows). Этот диск отформатирован как FAT32. Может ли это иметь какое-то отношение к этому? – Shamim Hafiz 24 May 2011 в 10:55
  • 2
    Вы выполнили установку Wubi (был создан C:\Ubuntu). Это не должно быть проблемой, если вы не ставите файлы на «C: & quot; а не вашей установки Ubuntu. Если вы не используете Windows или имеете достаточно места на диске, я предлагаю установить Ubuntu на выделенный раздел. И снова NTFS / FAT32 НЕ поддерживает разрешения Linux, поэтому вы можете запускать sudo chown user file, chmod 755 file, это не сработает. Для этого вам действительно нужна файловая система EXT. – Lekensteyn 24 May 2011 в 13:08
  • 3
    В той же истории ни одна из файловых систем Windows не поддерживает разрешения файлов Linux. Вы должны поместить файлы в файловую систему с форматированием EXT. – Lekensteyn 24 May 2011 в 13:17
  • 4
    Так что просто работа над папкой, принадлежащей Ubuntu, должна делать трюк, не так ли? Я имею в виду, я не должен использовать папки, которые не являются частью структуры файловой системы Ubuntus? – Shamim Hafiz 24 May 2011 в 13:38
  • 5
    Точно, просто оставайтесь в ~, я создаю ~/projects и вкладываю в него все мои проекты, вы можете сделать то же самое. – Lekensteyn 24 May 2011 в 13:46

.out - необычное расширение. Обычно это означает файл вывода трассировки.

Проверьте свой синтаксис, который вы используете для компиляции

, например

gcc myfile.c /usr/lib/libsomelibrary.a -o outputfilename

или, возможно,

g++ myfile.cpp -lm -o outputfilename

Вы можете проверить, установлен ли исполняемый бит в файле

ls -l a.out

, или вы можете просто принудительно выполнить исполняемый бит

chmod +x a.out

, то вы можете запустить файл

./a.out

или просто

a.out

Возможно, вы также убедитесь, что выходной файл написан правильно как двоичный

, т. е.

file a.out

Это сообщит, в каком формате находится файл - либо скрипт, либо двоичный файл

Вам редко нужно выполнять роль root, если вы не ограничили, кто должен быть способен для запуска исполняемого файла.

Если вы скомпилировали его как root (например, sudo make) или создали Makefile, который установил исполняемый файл в качестве пользователя root, я могу предложить вам восстановить его, когда пользователь вошел в систему

, т. е.

sudo chown fred:fred a.out

т.е. замените «fred» на ваш идентификатор пользователя.

5
ответ дан 25 July 2018 в 21:51

просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.

4
ответ дан 25 July 2018 в 21:51

Обходной путь для FAT-файловой системы в первом ответе

«Это может быть так, если вы помещаете файлы на флеш-накопитель, отформатированный в FAT32. Решение: (...) смонтировать диск с fmask = 0022 или umask = 0022 (omitting fmask). «

обычно не работает - по умолчанию для umask в большинстве случаев 0022, так что это ничего не меняет.

Another однако параметр эффективно отключает выполнение двоичных файлов, особенно если FAT-файловая система установлена ​​как не-root-user: noexec

. Так что просто монтируйте диски в формате FAT с опцией exec например:

sudo mount -o exec /dev/sd.. /mountpoint

(обычно это должно выполняться как root, следовательно, «sudo»), и вы должны иметь возможность выполнять двоичные файлы прямо оттуда.

0
ответ дан 26 July 2018 в 17:18

Я бы сказал, что ваша программа не имеет функции «main ()», как если бы это произошло, ваш компилятор выполнил бы исполняемый файл a.out. Прямо сейчас это всего лишь объектный файл, полный кода, но нет точки входа. main () - это специальное имя функции в C и C ++, которое сообщает компилятору создать программу, а не только объектные файлы, которые могут быть связаны с программой или библиотекой.

Мне было бы интересно узнать, что командной строки, которую вы использовали для создания этого файла, поскольку компилятор C ++ GNU GCC, g ++, не позволит мне создать простую программу с главной функцией:

#include <iostream>

using namespace std;

void no_main()
{
  cout << "Hello World" << endl;
}

$ g++ hello.cc
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 20 has invalid symbol index 21
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/../../../crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

Однако, если я сделаю изменение «void no_main», to 'int main' работает:

$ g++ hello.cc
$ ./a.out
Hello World
-1
ответ дан 26 July 2018 в 17:18

.out - необычное расширение. Обычно это означает файл вывода трассировки.

Проверьте свой синтаксис, который вы используете для компиляции

, например

gcc myfile.c /usr/lib/libsomelibrary.a -o outputfilename

или, возможно,

g++ myfile.cpp -lm -o outputfilename

Вы можете проверить, установлен ли исполняемый бит в файле

ls -l a.out

, или вы можете просто принудительно выполнить исполняемый бит

chmod +x a.out

, то вы можете запустить файл

./a.out

или просто

a.out

Возможно, вы также убедитесь, что выходной файл написан правильно как двоичный

, т. е.

file a.out

Это сообщит, в каком формате находится файл - либо скрипт, либо двоичный файл

Вам редко нужно выполнять роль root, если вы не ограничили, кто должен быть способен для запуска исполняемого файла.

Если вы скомпилировали его как root (например, sudo make) или создали Makefile, который установил исполняемый файл в качестве пользователя root, я могу предложить вам восстановить его, когда пользователь вошел в систему

, т. е.

sudo chown fred:fred a.out

т.е. замените «fred» на ваш идентификатор пользователя.

5
ответ дан 26 July 2018 в 17:18

Обходной путь для FAT-файловой системы в первом ответе

«Это может быть так, если вы помещаете файлы на флеш-накопитель, отформатированный в FAT32. Решение: (...) смонтировать диск с fmask = 0022 или umask = 0022 (omitting fmask). «

обычно не работает - по умолчанию для umask в большинстве случаев 0022, так что это ничего не меняет.

Another однако параметр эффективно отключает выполнение двоичных файлов, особенно если FAT-файловая система установлена ​​как не-root-user: noexec

. Так что просто монтируйте диски в формате FAT с опцией exec например:

sudo mount -o exec /dev/sd.. /mountpoint

(обычно это должно выполняться как root, следовательно, «sudo»), и вы должны иметь возможность выполнять двоичные файлы прямо оттуда.

0
ответ дан 31 July 2018 в 10:49

Я бы сказал, что ваша программа не имеет функции «main ()», как если бы это произошло, ваш компилятор выполнил бы исполняемый файл a.out. Прямо сейчас это всего лишь объектный файл, полный кода, но нет точки входа. main () - это специальное имя функции в C и C ++, которое сообщает компилятору создать программу, а не только объектные файлы, которые могут быть связаны с программой или библиотекой.

Мне было бы интересно узнать, что командной строки, которую вы использовали для создания этого файла, поскольку компилятор C ++ GNU GCC, g ++, не позволит мне создать простую программу с главной функцией:

#include <iostream>

using namespace std;

void no_main()
{
  cout << "Hello World" << endl;
}

$ g++ hello.cc
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 20 has invalid symbol index 21
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/../../../crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

Однако, если я сделаю изменение «void no_main», to 'int main' работает:

$ g++ hello.cc
$ ./a.out
Hello World
-1
ответ дан 31 July 2018 в 10:49

.out - необычное расширение. Обычно это означает файл вывода трассировки.

Проверьте свой синтаксис, который вы используете для компиляции

, например

gcc myfile.c /usr/lib/libsomelibrary.a -o outputfilename

или, возможно,

g++ myfile.cpp -lm -o outputfilename

Вы можете проверить, установлен ли исполняемый бит в файле

ls -l a.out

, или вы можете просто принудительно выполнить исполняемый бит

chmod +x a.out

, то вы можете запустить файл

./a.out

или просто

a.out

Возможно, вы также убедитесь, что выходной файл написан правильно как двоичный

, т. е.

file a.out

Это сообщит, в каком формате находится файл - либо скрипт, либо двоичный файл

Вам редко нужно выполнять роль root, если вы не ограничили, кто должен быть способен для запуска исполняемого файла.

Если вы скомпилировали его как root (например, sudo make) или создали Makefile, который установил исполняемый файл в качестве пользователя root, я могу предложить вам восстановить его, когда пользователь вошел в систему

, т. е.

sudo chown fred:fred a.out

т.е. замените «fred» на ваш идентификатор пользователя.

5
ответ дан 31 July 2018 в 10:49

Обходной путь для FAT-файловой системы в первом ответе

«Это может быть так, если вы помещаете файлы на флеш-накопитель, отформатированный в FAT32. Решение: (...) смонтировать диск с fmask = 0022 или umask = 0022 (omitting fmask). «

обычно не работает - по умолчанию для umask в большинстве случаев 0022, так что это ничего не меняет.

Another однако параметр эффективно отключает выполнение двоичных файлов, особенно если FAT-файловая система установлена ​​как не-root-user: noexec

. Так что просто монтируйте диски в формате FAT с опцией exec например:

sudo mount -o exec /dev/sd.. /mountpoint

(обычно это должно выполняться как root, следовательно, «sudo»), и вы должны иметь возможность выполнять двоичные файлы прямо оттуда.

0
ответ дан 31 July 2018 в 11:54

Я бы сказал, что ваша программа не имеет функции «main ()», как если бы это произошло, ваш компилятор выполнил бы исполняемый файл a.out. Прямо сейчас это всего лишь объектный файл, полный кода, но нет точки входа. main () - это специальное имя функции в C и C ++, которое сообщает компилятору создать программу, а не только объектные файлы, которые могут быть связаны с программой или библиотекой.

Мне было бы интересно узнать, что командной строки, которую вы использовали для создания этого файла, поскольку компилятор C ++ GNU GCC, g ++, не позволит мне создать простую программу с главной функцией:

#include <iostream>

using namespace std;

void no_main()
{
  cout << "Hello World" << endl;
}

$ g++ hello.cc
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 20 has invalid symbol index 21
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/../../../crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

Однако, если я сделаю изменение «void no_main», to 'int main' работает:

$ g++ hello.cc
$ ./a.out
Hello World
-1
ответ дан 31 July 2018 в 11:54

.out - необычное расширение. Обычно это означает файл вывода трассировки.

Проверьте свой синтаксис, который вы используете для компиляции

, например

gcc myfile.c /usr/lib/libsomelibrary.a -o outputfilename

или, возможно,

g++ myfile.cpp -lm -o outputfilename

Вы можете проверить, установлен ли исполняемый бит в файле

ls -l a.out

, или вы можете просто принудительно выполнить исполняемый бит

chmod +x a.out

, то вы можете запустить файл

./a.out

или просто

a.out

Возможно, вы также убедитесь, что выходной файл написан правильно как двоичный

, т. е.

file a.out

Это сообщит, в каком формате находится файл - либо скрипт, либо двоичный файл

Вам редко нужно выполнять роль root, если вы не ограничили, кто должен быть способен для запуска исполняемого файла.

Если вы скомпилировали его как root (например, sudo make) или создали Makefile, который установил исполняемый файл в качестве пользователя root, я могу предложить вам восстановить его, когда пользователь вошел в систему

, т. е.

sudo chown fred:fred a.out

т.е. замените «fred» на ваш идентификатор пользователя.

5
ответ дан 31 July 2018 в 11:54

Обходной путь для FAT-файловой системы в первом ответе

«Это может быть так, если вы помещаете файлы на флеш-накопитель, отформатированный в FAT32. Решение: (...) смонтировать диск с fmask = 0022 или umask = 0022 (omitting fmask). «

обычно не работает - по умолчанию для umask в большинстве случаев 0022, так что это ничего не меняет.

Another однако параметр эффективно отключает выполнение двоичных файлов, особенно если FAT-файловая система установлена ​​как не-root-user: noexec

. Так что просто монтируйте диски в формате FAT с опцией exec например:

sudo mount -o exec /dev/sd.. /mountpoint

(обычно это должно выполняться как root, следовательно, «sudo»), и вы должны иметь возможность выполнять двоичные файлы прямо оттуда.

0
ответ дан 2 August 2018 в 03:27

Я бы сказал, что ваша программа не имеет функции «main ()», как если бы это произошло, ваш компилятор выполнил бы исполняемый файл a.out. Прямо сейчас это всего лишь объектный файл, полный кода, но нет точки входа. main () - это специальное имя функции в C и C ++, которое сообщает компилятору создать программу, а не только объектные файлы, которые могут быть связаны с программой или библиотекой.

Мне было бы интересно узнать, что командной строки, которую вы использовали для создания этого файла, поскольку компилятор C ++ GNU GCC, g ++, не позволит мне создать простую программу с главной функцией:

#include <iostream>

using namespace std;

void no_main()
{
  cout << "Hello World" << endl;
}

$ g++ hello.cc
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 20 has invalid symbol index 21
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/../../../crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

Однако, если я сделаю изменение «void no_main», to 'int main' работает:

$ g++ hello.cc
$ ./a.out
Hello World
-1
ответ дан 2 August 2018 в 03:27

.out - необычное расширение. Обычно это означает файл вывода трассировки.

Проверьте свой синтаксис, который вы используете для компиляции

, например

gcc myfile.c /usr/lib/libsomelibrary.a -o outputfilename

или, возможно,

g++ myfile.cpp -lm -o outputfilename

Вы можете проверить, установлен ли исполняемый бит в файле

ls -l a.out

, или вы можете просто принудительно выполнить исполняемый бит

chmod +x a.out

, то вы можете запустить файл

./a.out

или просто

a.out

Возможно, вы также убедитесь, что выходной файл написан правильно как двоичный

, т. е.

file a.out

Это сообщит, в каком формате находится файл - либо скрипт, либо двоичный файл

Вам редко нужно выполнять роль root, если вы не ограничили, кто должен быть способен для запуска исполняемого файла.

Если вы скомпилировали его как root (например, sudo make) или создали Makefile, который установил исполняемый файл в качестве пользователя root, я могу предложить вам восстановить его, когда пользователь вошел в систему

, т. е.

sudo chown fred:fred a.out

т.е. замените «fred» на ваш идентификатор пользователя.

5
ответ дан 2 August 2018 в 03:27

.out - необычное расширение. Обычно это означает файл вывода трассировки.

Проверьте свой синтаксис, который вы используете для компиляции

, например

gcc myfile.c /usr/lib/libsomelibrary.a -o outputfilename

или, возможно,

g++ myfile.cpp -lm -o outputfilename

Вы можете проверить, установлен ли исполняемый бит в файле

ls -l a.out

, или вы можете просто принудительно выполнить исполняемый бит

chmod +x a.out

, то вы можете запустить файл

./a.out

или просто

a.out

Возможно, вы также убедитесь, что выходной файл написан правильно как двоичный

, т. е.

file a.out

Это сообщит, в каком формате находится файл - либо скрипт, либо двоичный файл

Вам редко нужно выполнять роль root, если вы не ограничили, кто должен быть способен для запуска исполняемого файла.

Если вы скомпилировали его как root (например, sudo make) или создали Makefile, который установил исполняемый файл в качестве пользователя root, я могу предложить вам восстановить его, когда пользователь вошел в систему

, т. е.

sudo chown fred:fred a.out

т.е. замените «fred» на ваш идентификатор пользователя.

5
ответ дан 4 August 2018 в 19:24

Обходной путь для FAT-файловой системы в первом ответе

«Это может быть так, если вы помещаете файлы на флеш-накопитель, отформатированный в FAT32. Решение: (...) смонтировать диск с fmask = 0022 или umask = 0022 (omitting fmask). «

обычно не работает - по умолчанию для umask в большинстве случаев 0022, так что это ничего не меняет.

Another однако параметр эффективно отключает выполнение двоичных файлов, особенно если FAT-файловая система установлена ​​как не-root-user: noexec

. Так что просто монтируйте диски в формате FAT с опцией exec например:

sudo mount -o exec /dev/sd.. /mountpoint

(обычно это должно выполняться как root, следовательно, «sudo»), и вы должны иметь возможность выполнять двоичные файлы прямо оттуда.

0
ответ дан 4 August 2018 в 19:24

Я бы сказал, что ваша программа не имеет функции «main ()», как если бы это произошло, ваш компилятор выполнил бы исполняемый файл a.out. Прямо сейчас это всего лишь объектный файл, полный кода, но нет точки входа. main () - это специальное имя функции в C и C ++, которое сообщает компилятору создать программу, а не только объектные файлы, которые могут быть связаны с программой или библиотекой.

Мне было бы интересно узнать, что командной строки, которую вы использовали для создания этого файла, поскольку компилятор C ++ GNU GCC, g ++, не позволит мне создать простую программу с главной функцией:

#include <iostream>

using namespace std;

void no_main()
{
  cout << "Hello World" << endl;
}

$ g++ hello.cc
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 20 has invalid symbol index 21
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/../../../crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

Однако, если я сделаю изменение «void no_main», to 'int main' работает:

$ g++ hello.cc
$ ./a.out
Hello World
-1
ответ дан 4 August 2018 в 19:24

Обходной путь для FAT-файловой системы в первом ответе

«Это может быть так, если вы помещаете файлы на флеш-накопитель, отформатированный в FAT32. Решение: (...) смонтировать диск с fmask = 0022 или umask = 0022 (omitting fmask). «

обычно не работает - по умолчанию для umask в большинстве случаев 0022, так что это ничего не меняет.

Another однако параметр эффективно отключает выполнение двоичных файлов, особенно если FAT-файловая система установлена ​​как не-root-user: noexec

. Так что просто монтируйте диски в формате FAT с опцией exec например:

sudo mount -o exec /dev/sd.. /mountpoint

(обычно это должно выполняться как root, следовательно, «sudo»), и вы должны иметь возможность выполнять двоичные файлы прямо оттуда.

0
ответ дан 6 August 2018 в 03:35

Я бы сказал, что ваша программа не имеет функции «main ()», как если бы это произошло, ваш компилятор выполнил бы исполняемый файл a.out. Прямо сейчас это всего лишь объектный файл, полный кода, но нет точки входа. main () - это специальное имя функции в C и C ++, которое сообщает компилятору создать программу, а не только объектные файлы, которые могут быть связаны с программой или библиотекой.

Мне было бы интересно узнать, что командной строки, которую вы использовали для создания этого файла, поскольку компилятор C ++ GNU GCC, g ++, не позволит мне создать простую программу с главной функцией:

#include <iostream>

using namespace std;

void no_main()
{
  cout << "Hello World" << endl;
}

$ g++ hello.cc
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 2
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 12
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 13
/usr/bin/ld.bfd.real: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 20 has invalid symbol index 21
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/../../../crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

Однако, если я сделаю изменение «void no_main», to 'int main' работает:

$ g++ hello.cc
$ ./a.out
Hello World
-1
ответ дан 6 August 2018 в 03:35

.out - необычное расширение. Обычно это означает файл вывода трассировки.

Проверьте свой синтаксис, который вы используете для компиляции

, например

gcc myfile.c /usr/lib/libsomelibrary.a -o outputfilename

или, возможно,

g++ myfile.cpp -lm -o outputfilename

Вы можете проверить, установлен ли исполняемый бит в файле

ls -l a.out

, или вы можете просто принудительно выполнить исполняемый бит

chmod +x a.out

, то вы можете запустить файл

./a.out

или просто

a.out

Возможно, вы также убедитесь, что выходной файл написан правильно как двоичный

, т. е.

file a.out

Это сообщит, в каком формате находится файл - либо скрипт, либо двоичный файл

Вам редко нужно выполнять роль root, если вы не ограничили, кто должен быть способен для запуска исполняемого файла.

Если вы скомпилировали его как root (например, sudo make) или создали Makefile, который установил исполняемый файл в качестве пользователя root, я могу предложить вам восстановить его, когда пользователь вошел в систему

, т. е.

sudo chown fred:fred a.out

т.е. замените «fred» на ваш идентификатор пользователя.

5
ответ дан 6 August 2018 в 03:35

Другие вопросы по тегам:

Похожие вопросы: