Я написал программу на C ++ и выполнил ее для создания файла a.out. Однако, когда я пытаюсь запустить его, я получаю отказ от прав. Я читал, что мы можем использовать sudo, но я не могу заставить его работать. Я использую что-то вроде sudo "./a.out", но это тоже не работает.
Edit:
Вот сообщение, которое я получаю, когда пытаюсь "./a .out ".
bash: ./a.out: Permission denied
просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.
просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.
просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.
просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.
просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.
просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.
просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.
просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.
просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.
C:\Ubuntu
). Это не должно быть проблемой, если вы не ставите файлы на «C: & quot; а не вашей установки Ubuntu. Если вы не используете Windows или имеете достаточно места на диске, я предлагаю установить Ubuntu на выделенный раздел. И снова NTFS / FAT32 НЕ поддерживает разрешения Linux, поэтому вы можете запускать sudo chown user file
, chmod 755 file
, это не сработает. Для этого вам действительно нужна файловая система EXT.
– Lekensteyn
24 May 2011 в 13:08
~
, я создаю ~/projects
и вкладываю в него все мои проекты, вы можете сделать то же самое.
– Lekensteyn
24 May 2011 в 13:46
Обычно g++
дает разрешения на создание созданного файла. Если вы не передадите параметр -o
, файл будет называться a.out
.
Две возможные причины, по которым ваш файл не имеет установленного бита исполнения, с их решениями:
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
C:\Ubuntu
). Это не должно быть проблемой, если вы не ставите файлы на «C: & quot; а не вашей установки Ubuntu. Если вы не используете Windows или имеете достаточно места на диске, я предлагаю установить Ubuntu на выделенный раздел. И снова NTFS / FAT32 НЕ поддерживает разрешения Linux, поэтому вы можете запускать sudo chown user file
, chmod 755 file
, это не сработает. Для этого вам действительно нужна файловая система EXT.
– Lekensteyn
24 May 2011 в 13:08
~
, я создаю ~/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» на ваш идентификатор пользователя.
просто скопируйте папку в свою домашнюю папку, и она будет работать. Вероятно, вы пытаетесь запустить его на внешнем диске или что-то в этом роде.
Обходной путь для 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»), и вы должны иметь возможность выполнять двоичные файлы прямо оттуда.
Я бы сказал, что ваша программа не имеет функции «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
.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» на ваш идентификатор пользователя.
Обходной путь для 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»), и вы должны иметь возможность выполнять двоичные файлы прямо оттуда.
Я бы сказал, что ваша программа не имеет функции «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
.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» на ваш идентификатор пользователя.
Обходной путь для 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»), и вы должны иметь возможность выполнять двоичные файлы прямо оттуда.
Я бы сказал, что ваша программа не имеет функции «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
.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» на ваш идентификатор пользователя.
Обходной путь для 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»), и вы должны иметь возможность выполнять двоичные файлы прямо оттуда.
Я бы сказал, что ваша программа не имеет функции «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
.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» на ваш идентификатор пользователя.
.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» на ваш идентификатор пользователя.
Обходной путь для 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»), и вы должны иметь возможность выполнять двоичные файлы прямо оттуда.
Я бы сказал, что ваша программа не имеет функции «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
Обходной путь для 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»), и вы должны иметь возможность выполнять двоичные файлы прямо оттуда.
Я бы сказал, что ваша программа не имеет функции «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
.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» на ваш идентификатор пользователя.