Я написал модулёк, откомпилил его с ключём -с, получил файл .о
Теперь пытаюсь компилить программу, использующую этот модуль.
В тексте проги указал #include "module.h", но gcc ( как и g++ )
просит реализацию функций, описаных в модуле. Как указать gcc,
где брать эти реализации?
Те же самые исходники компилятся под
Windows компилятором Borland C. Только там вместо файла *.о файл
*.obj .
>Я написал модулёк, откомпилил его с ключём -с, получил файл .о
>Теперь пытаюсь компилить программу, использующую этот модуль.
>В тексте проги указал #include "module.h", но gcc ( как и g++
>)
>просит реализацию функций, описаных в модуле. Как указать gcc,
>где брать эти реализации?
>Те же самые исходники компилятся под
>Windows компилятором Borland C. Только там вместо файла *.о файл
>*.obj .#gcc ... -l<lib> ... x.o -ox
- где lib - библиотека, причём, например, для библиотеки libsocket.x.x... - пишем: -lsocket.
Дело в том, что gcc и компилятор и компоновщик (линкёр) в одном лице.
>Дело в том, что gcc и компилятор и компоновщик (линкёр) в одном
>лице.Я не понял этого уточнения ...
В одном, конечно, но ключ -l - это как-раз к его компоновщику и относится - подключаемые библиотеки.
>>Дело в том, что gcc и компилятор и компоновщик (линкёр) в одном
>>лице.
>
>Я не понял этого уточнения ...
>В одном, конечно, но ключ -l - это как-раз к его компоновщику
>и относится - подключаемые библиотеки.
Начинающие мигранты с Borland обычно толком не помнят, зачем нужен
компоновщик. Это заметно по фразам на подобие "создаю проект, компилирую,
получаю такие файлы". Им нужно тогда сказать, что "в Linux всё это делается
с помощью gcc (во FreeBSD -- bcc), а проект в простых случаях -- это только
Makefile".
>
>#gcc ... -l<lib> ... x.o -ox
>- где lib - библиотека, причём, например, для библиотеки libsocket.x.x... - пишем:
>-lsocket.
>
Не понял обозначений. Скажем есть модуль module.h, к нему есть module.c и
module.o; есть прога prog.c, которая этот модулёк использует. Все в одной
папке. Как компилить?
Пробовал :
#gcc prog.c -lmodule.o
#gcc prog.c -l module.o
#gcc prog.c -lmodule
#gcc prog.c -l module
>>
>>#gcc ... -l<lib> ... x.o -ox
>>- где lib - библиотека, причём, например, для библиотеки libsocket.x.x... - пишем:
>>-lsocket.
>>
>Не понял обозначений. Скажем есть модуль module.h, к нему есть module.c и
>
>module.o; есть прога prog.c, которая этот модулёк использует. Все в одной
>папке. Как компилить?
> Пробовал :
>#gcc prog.c -lmodule.o
>#gcc prog.c -l module.o
>#gcc prog.c -lmodule
>#gcc prog.c -l moduleа если разобраться, что такое есть *.h, *.c, *.o и доки про gcc почитать? gcc при компиляции создаст библиотеку libmodule.o, но никак не module.o. и когда скажешь gcc prog.c -lmodule.o, то на этапе линковки будет использована библиотека libmodule.o
>>Не понял обозначений. Скажем есть модуль module.h, к нему есть module.c и
>>
>>module.o; есть прога prog.c, которая этот модулёк использует. Все в одной
>>папке. Как компилить?
bash$ g++ -Wall -c module.c
bash$ g++ -Wall -c prog.c
bash$ g++ -Wall -o prog prog.o module.o
Или в один шаг
bash# g++ -Wall -o prog prog.c module.c
После этого
bash$ ./progГде-то к осени у меня будет русский pdf об ООП в Linux (для самых
маленьких). Под названием "Объектно ориентированное программирование на C++ для Linux (руководство к действию)".
Бросьте адресок на zbl@gmail.ru -- вышлю, как только, так сразу.>а если разобраться, что такое есть *.h, *.c, *.o и доки
>про gcc почитать?
Красную краску в студию!
Если по англьцки не в зуб ногой, то кыш сюда:
http://lsi.bas-net.by/bsuir/base/node1.html
>>>Не понял обозначений. Скажем есть модуль module.h, к нему есть module.c и
>>>
>>>module.o; есть прога prog.c, которая этот модулёк использует. Все в одной
>>>папке. Как компилить?
>bash$ g++ -Wall -c module.c
>bash$ g++ -Wall -c prog.c
>bash$ g++ -Wall -o prog prog.o module.o
>Или в один шаг
>bash# g++ -Wall -o prog prog.c module.c
>После этого
>bash$ ./prog
>спасибо за уточнение
>Где-то к осени у меня будет русский pdf об ООП в Linux
>(для самых
>маленьких). Под названием "Объектно ориентированное программирование на C++ для Linux (руководство к
>действию)".разве я давал конкретный ответ на поставленный вопрос? я указал на один из моментов, которые человек не понял. до конца в таком вопросе разбираться - его задача. а я (это конечно только мое мнение), должен только на очевидные ошибки указывать - обучается пусть читая форум или на курсы идет.
>Бросьте адресок на zbl@gmail.ru -- вышлю, как только, так сразу.
>спасибо за заботу - адресок указан в сабже сообщения, на которое Вы отвечали...
>>а если разобраться, что такое есть *.h, *.c, *.o и доки
>>про gcc почитать?
>Красную краску в студию!(совсем забыл сказать об этом в начале своего ответа)
>Если по англьцки не в зуб ногой, то кыш сюда:
да не! мы с ним (аглицким) замечательно ладим. может просто у кого-то проблемы с русским? - какой был задан вопрос (атором темы) - такой и был дан ответ.
>http://lsi.bas-net.by/bsuir/base/node1.html
обидно, но ссылочка похожа на дохлую. жаль - столько знаний упустил.
>спасибо за уточнение
>
>разве я давал конкретный ответ на поставленный вопрос? я указал на один
>из моментов, которые человек не понял. до конца в таком вопросе
>разбираться - его задача. а я (это конечно только мое мнение),
>должен только на очевидные ошибки указывать - обучается пусть читая форум
>или на курсы идет.
>
>спасибо за заботу - адресок указан в сабже сообщения, на которое Вы
>отвечали...
>
>(совсем забыл сказать об этом в начале своего ответа)
>
>да не! мы с ним (аглицким) замечательно ладим. может просто у кого-то
>проблемы с русским? - какой был задан вопрос (атором темы) -
>такой и был дан ответ.
Шибко извиняюсь, однако... Однако, недорозумение,..
Я этот постинг не в то место сунул. Это был ответ не Вам а вопрошавшему.
Я просто цитировал Ваш текст, обращаясь к нему. Ресурсы для самых
маленьких ему нужны, а не Вам.
RomanD, кажется, понял меня правильно.>>http://lsi.bas-net.by/bsuir/base/node1.html
>обидно, но ссылочка похожа на дохлую. жаль - столько знаний упустил.
Да, сдохла. Но, когда я писал, работала -- проверял.
>Шибко извиняюсь, однако... Однако, недорозумение,..
>Я этот постинг не в то место сунул. Это был ответ не
>Вам а вопрошавшему.
>Я просто цитировал Ваш текст, обращаясь к нему. Ресурсы для самых
>маленьких ему нужны, а не Вам.
>RomanD, кажется, понял меня правильно.
>я тоже извиняюсь - мог бы и сообразить в чем дело...
>>>http://lsi.bas-net.by/bsuir/base/node1.html
>>обидно, но ссылочка похожа на дохлую. жаль - столько знаний упустил.
>Да, сдохла. Но, когда я писал, работала -- проверял.
Сейчас тоже работает (15:02 MSD/MSK Wed 16 July 2003).
>Не понял обозначений. Скажем есть модуль module.h, к нему есть module.c и
>
>module.o; есть прога prog.c, которая этот модулёк использует. Все в одной
>папке. Как компилить?
> Пробовал :
>#gcc prog.c -lmodule.o
>#gcc prog.c -l module.o
>#gcc prog.c -lmodule
>#gcc prog.c -l moduleЧтобы точнее понять обозначения, нужно точнее использовать терминологию, особенно после Win... Что такое "модуль"? - один из *.h/*.cc фалов в проекте (Makefile)? или "нечто", что должно отдельно собираться в библиотеку? статическую *.a или разделяемую *.so, или разговор об "модуле ядра" и нужно показать все ключи?
Но я таки предполагаю - что просто один из файлов проекта?
Тогда (простейший случай):
#gcc prog.c module.c -oprog
и всё...Здесь уже говорили, что gcc - это и компилятор (кстати, для многих, >10 аппаратных платформ, и с многих языков: c/c++, fortran, ada - если 3.х..), и это же - компоновщик. В зависимости от ключей можно использовать любую одну фазу, или обе...