philipas Опубликовано 1 февраля, 2006 Жалоба Поделиться Опубликовано 1 февраля, 2006 Вот у меня проблема большУШШШАЯ!!!! у меня стоит Mandrake Linux 10.0. И вот в чём проблема: у меня не получается скомпилировать с код. Я его прописываю в текстовом ред сохраняю с расширением .с запускаю командную строку. Имя файла proga.c я прописываю gcc proga.c -c proga, gcc proga.c -o proga, gcc proga.c , gcc -c proga.c либо тоже самое только вместо gcc - cc тоже самое: либо появляется файл с расширением .out который нереагирует когда его выполняешь или файл proga.o тоже самое нифига. Я только недавно в Линукси помогите с проблемой (И под root консолью тоже пробовал =(() Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 1 февраля, 2006 Жалоба Поделиться Опубликовано 1 февраля, 2006 philipus писал(а) ср, 01 февраля 2006 19:59 Вот у меня проблема большУШШШАЯ!!!! у меня стоит Mandrake Linux 10.0. И вот в чём проблема: у меня не получается скомпилировать с код. Я его прописываю в текстовом ред сохраняю с расширением .с запускаю командную строку. Имя файла proga.c я прописываю gcc proga.c -c proga, gcc proga.c -o proga, gcc proga.c , gcc -c proga.c либо тоже самое только вместо gcc - cc тоже самое: либо появляется файл с расширением .out который нереагирует когда его выполняешь или файл proga.o тоже самое нифига. Я только недавно в Линукси помогите с проблемой (И под root консолью тоже пробовал =(() Покажите код, дайте лог Ваших действий, опишите симптомы (например, что значит "нереагирует"). А писать софт под рутом - это плохая мысль, больше так не делайте Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
philipas Опубликовано 1 февраля, 2006 Автор Жалоба Поделиться Опубликовано 1 февраля, 2006 ну хотябы #include<stdio.h> void main() { printf("somewords\n"); } 1)создаю текст докумет с таким содержанием(выше) 2)сохраняю с расширением .c 3)всё находиться в папке x 4)в этой папке запускаю терминал 5)пишу код (см сабж) исполняю, никаких ошибок. 6)в папке появляется файл a.out 7) при двойном щелчке или через выполнить программу ниго не происходит=)) Я так понимаю программа должна работать а она не работает !!! =)) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
EL[michlen] Опубликовано 1 февраля, 2006 Жалоба Поделиться Опубликовано 1 февраля, 2006 Вывод программы направляется в терминал. Это не Windows, где почти под каждую консольную программу запускается отдельное окно с терминалом. Просто запускайте a.out из терминала, все будет работать. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 1 февраля, 2006 Жалоба Поделиться Опубликовано 1 февраля, 2006 Если мне не изменяет память (El, подправьте, если что ), виндозные приложения ведут себя точно так же. Вы писали что-нибудь под Винду на чистом АПИ? Всякое виндозное приложение является оконным, и если не создавать окна вручную, то тоже будет "не работать". Консольное приложение, которое создает окно терминала при запуске его из оболочки, на самом деле является обыкновенным оконным, но при компиляции добавляется код, отвечающий за создание окна терминала. (это касается только виндозных приложений, досовские - отдельный разговор). Попробуйте под Виндой написать программу, использующую printf, но с точкой входа WinMain - запуская ее из оболочки, получите тот же результат, что и с Вашей программой в Линухе. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
hunk Опубликовано 2 февраля, 2006 Жалоба Поделиться Опубликовано 2 февраля, 2006 Какой дистрибутив и какое ядро? В ядре хоть включена поддержка формата a.out Сейчас многие по умолчанию включают только формат исполняемых файлов elf или misc. В общем, читайте документацию по gcc, как скомпилить прогу в формате elf. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 2 февраля, 2006 Жалоба Поделиться Опубликовано 2 февраля, 2006 hunk писал(а) чт, 02 февраля 2006 11:18 В ядре хоть включена поддержка формата a.out Сейчас многие по умолчанию включают только формат исполняемых файлов elf или misc. В общем, читайте документацию по gcc, как скомпилить прогу в формате elf. 2 hunk Не путайте имя выводного файла gcc и формат. Прога по умолчанию компилится в ELF, и ничего особенного тут придумывать не надо: es@tbw ~ $ echo "main(){}" > 1.c es@tbw ~ $ gcc 1.c es@tbw ~ $ objdump -f a.out a.out: формат файла elf32-i386 архитектура: i386, флаги 0x00000112: EXEC_P, HAS_SYMS, D_PAGED начальный адрес 0x08048290 ЗЫ. Кстати, в первом же посте русским по белому написано, какой дистрибутив. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
hunk Опубликовано 2 февраля, 2006 Жалоба Поделиться Опубликовано 2 февраля, 2006 Прошу прощения, совсем ослеп Да и с gcc - я ведь не программист, хвала аллаху Просто встречаются еще иногда программки в этом древнем формате Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
EL[michlen] Опубликовано 2 февраля, 2006 Жалоба Поделиться Опубликовано 2 февраля, 2006 Все правильно, но: EvilShadow писал(а) ср, 01 февраля 2006 23:11 Попробуйте под Виндой написать программу, использующую printf, но с точкой входа WinMain - запуская ее из оболочки, получите тот же результат, что и с Вашей программой в Линухе. Вот-вот, именно WinMain. А если создавать в VC++ (или другой среде) консольное приложение с точкой входа main, то автоматически создается консоль. Пояснял я для того, чтобы автор вопроса увидел отличия. Кстати, из WinMain точно так же легко можно создать консоль (вызов всего одной функции, насколько я помню), но это придется делать вручную. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Byte Опубликовано 2 февраля, 2006 Жалоба Поделиться Опубликовано 2 февраля, 2006 не совсем main... на самом деле из run time библиотеки c++ импортируется что-то типа _tmain или что-то подобное (уже не помню), досовские рантайм библиотеки видовыми компиляторами не используются. кому интересно (вдруг под винду программить придется ), рекомендую книги Рихтера... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 2 февраля, 2006 Жалоба Поделиться Опубликовано 2 февраля, 2006 Byte писал(а) чт, 02 февраля 2006 15:55 не совсем main... на самом деле из run time библиотеки c++ импортируется что-то типа _tmain или что-то подобное (уже не помню), досовские рантайм библиотеки видовыми компиляторами не используются. кому интересно (вдруг под винду программить придется ), рекомендую книги Рихтера... Вы меня заинтриговали Нынче же схожу в Винду, проверю Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
EL[michlen] Опубликовано 2 февраля, 2006 Жалоба Поделиться Опубликовано 2 февраля, 2006 _tmain - это тот же main, просто используется при поддержке Unicode. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Byte Опубликовано 2 февраля, 2006 Жалоба Поделиться Опубликовано 2 февраля, 2006 дабы далеко не ходить. приведу выдержу из книги Джеффри Рихрера "Создание эффективных WIN-32 приложений с учетом специфики 64 разрядной версии Windows" (да простят меня линуксоиды ) ************* Во всех Windows-приложениях должна быть входная функция за реализацию которой отвечаете Вы Существует четыре такие функции: int WINAPI WinMain( HINSTANCE hinstExe, HINSTANCE, PSTR pszCmdLine, int nCmdShow); int WINAPT wWinMain( HINSTANCE hinstExe, HINSTANCE, PWSTR pszCmdLine, int nCmdShow); int __cdecl main( int argc, char *argv[], char *envp[]); int _cdecl wmain( int argc, wchar_t *argv[], wchar_t *envp[]); На самом делс входная функция операционной системой не вызывается Вместо этого происходит обращение к старювой функции из библиотеки С/С++ Она ини циализирует библиотеку С/С++, чтобы можно было вызывать такие функции, как malloc и free, а также обеспечивает корректное создание любых объявленных Вами глобальных и статических С++-объектов до того, как начнется выполнение Вашего кода ************** Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
EL[michlen] Опубликовано 2 февраля, 2006 Жалоба Поделиться Опубликовано 2 февраля, 2006 Byte, все правильно, только как это относится к теме? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Byte Опубликовано 2 февраля, 2006 Жалоба Поделиться Опубликовано 2 февраля, 2006 EL[michlen писал(а) чт, 02 февраля 2006 17:04]Byte, все правильно, только как это относится к теме? да заговорили про виндовые консольные программы, вот и вспомнил.. а так, воще-то, ОФФТОПИК, согласен... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
philipas Опубликовано 2 февраля, 2006 Автор Жалоба Поделиться Опубликовано 2 февраля, 2006 Ой спасибо огомное конечно за всю инфу =)) Но можно вопрос последний наверное=) Цитата: Вывод программы направляется в терминал. Это не Windows, где почти под каждую консольную программу запускается отдельное окно с терминалом. Просто запускайте a.out из терминала, все будет работать. Как запускать a.out из терминала =)) Заранее благодарен Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Dimnet Опубликовано 2 февраля, 2006 Жалоба Поделиться Опубликовано 2 февраля, 2006 ./a.out Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Hans R. Steiner Опубликовано 3 февраля, 2006 Жалоба Поделиться Опубликовано 3 февраля, 2006 Dimnet писал(а) чт, 02 февраля 2006 17:32 ./a.out chmod +x [path]/a.out; [path]/a.out or sh [path]/a.out Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 3 февраля, 2006 Жалоба Поделиться Опубликовано 3 февраля, 2006 Hans R. Steiner писал(а) пт, 03 февраля 2006 12:22 Dimnet писал(а) чт, 02 февраля 2006 17:32 ./a.out chmod +x [path]/a.out; [path]/a.out or sh [path]/a.out Это зачем? es@tbw ~ $ echo "main(){}" > 1.c es@tbw ~ $ gcc 1.c es@tbw ~ $ ls -l a.out -rwxr-xr-x 1 es users 6260 Фев 3 14:58 a.out Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.