Перейти к содержанию

Помогите с Компиляцией


Рекомендуемые сообщения

Вот у меня проблема большУШШШАЯ!!!! у меня стоит 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 консолью тоже пробовал =(()

Ссылка на комментарий
Поделиться на другие сайты

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 консолью тоже пробовал =(()

Покажите код, дайте лог Ваших действий, опишите симптомы (например, что значит "нереагирует"). А писать софт под рутом - это плохая мысль, больше так не делайте Smile

Ссылка на комментарий
Поделиться на другие сайты

ну хотябы

#include<stdio.h>

void main()

{

printf("somewords\n");

}

1)создаю текст докумет с таким содержанием(выше)

2)сохраняю с расширением .c

3)всё находиться в папке x

4)в этой папке запускаю терминал

5)пишу код (см сабж) исполняю, никаких ошибок.

6)в папке появляется файл a.out

7) при двойном щелчке или через выполнить программу ниго не происходит=)) Я так понимаю программа должна работать а она не работает !!! =))

Ссылка на комментарий
Поделиться на другие сайты

Вывод программы направляется в терминал. Это не Windows, где почти под каждую консольную программу запускается отдельное окно с терминалом. Просто запускайте a.out из терминала, все будет работать.

Ссылка на комментарий
Поделиться на другие сайты

Если мне не изменяет память (El, подправьте, если что Smile), виндозные приложения ведут себя точно так же. Вы писали что-нибудь под Винду на чистом АПИ? Всякое виндозное приложение является оконным, и если не создавать окна вручную, то тоже будет "не работать". Консольное приложение, которое создает окно терминала при запуске его из оболочки, на самом деле является обыкновенным оконным, но при компиляции добавляется код, отвечающий за создание окна терминала. (это касается только виндозных приложений, досовские - отдельный разговор). Попробуйте под Виндой написать программу, использующую printf, но с точкой входа WinMain - запуская ее из оболочки, получите тот же результат, что и с Вашей программой в Линухе.

Ссылка на комментарий
Поделиться на другие сайты

Какой дистрибутив

и какое ядро?

В ядре хоть включена

поддержка формата a.out

Сейчас многие по умолчанию

включают только формат исполняемых

файлов elf или misc.

В общем, читайте документацию по gcc,

как скомпилить прогу в формате elf.

Ссылка на комментарий
Поделиться на другие сайты

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

ЗЫ. Кстати, в первом же посте русским по белому написано, какой дистрибутив.

Ссылка на комментарий
Поделиться на другие сайты

Прошу прощения, совсем ослеп Smile

Да и с gcc - я ведь не программист,

хвала аллаху Laughing

Просто встречаются еще иногда программки

в этом древнем формате Smile

Ссылка на комментарий
Поделиться на другие сайты

Все правильно, но:

EvilShadow писал(а) ср, 01 февраля 2006 23:11

Попробуйте под Виндой написать программу, использующую printf, но с точкой входа WinMain - запуская ее из оболочки, получите тот же результат, что и с Вашей программой в Линухе.

Вот-вот, именно WinMain. А если создавать в VC++ (или другой среде) консольное приложение с точкой входа main, то автоматически создается консоль. Пояснял я для того, чтобы автор вопроса увидел отличия.

Кстати, из WinMain точно так же легко можно создать консоль (вызов всего одной функции, насколько я помню), но это придется делать вручную.

Ссылка на комментарий
Поделиться на другие сайты

не совсем main... на самом деле из run time библиотеки c++ импортируется что-то типа _tmain или что-то подобное (уже не помню), досовские рантайм библиотеки видовыми компиляторами не используются. кому интересно (вдруг под винду программить придется Smile ), рекомендую книги Рихтера...

Ссылка на комментарий
Поделиться на другие сайты

Byte писал(а) чт, 02 февраля 2006 15:55

не совсем main... на самом деле из run time библиотеки c++ импортируется что-то типа _tmain или что-то подобное (уже не помню), досовские рантайм библиотеки видовыми компиляторами не используются. кому интересно (вдруг под винду программить придется Smile ), рекомендую книги Рихтера...

Вы меня заинтриговали Smile Нынче же схожу в Винду, проверю Wink

Ссылка на комментарий
Поделиться на другие сайты

дабы далеко не ходить. приведу выдержу из книги Джеффри Рихрера "Создание эффективных WIN-32 приложений с учетом специфики 64 разрядной версии Windows" (да простят меня линуксоиды Smile )

*************

Во всех 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

писал(а) чт, 02 февраля 2006 17:04]Byte, все правильно, только как это относится к теме?

да заговорили про виндовые консольные программы, вот и вспомнил..

а так, воще-то, ОФФТОПИК, согласен...

Ссылка на комментарий
Поделиться на другие сайты

Ой спасибо огомное конечно за всю инфу =)) Но можно вопрос последний наверное=)

Цитата:

Вывод программы направляется в терминал. Это не Windows, где почти под каждую консольную программу запускается отдельное окно с терминалом. Просто запускайте a.out из терминала, все будет работать.

Как запускать a.out из терминала =)) Заранее благодарен
Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...