Написал .h файл, там только дефайны макросов и заголовки функций. Есть в том же каталоге файл .с, в котором описания этих функций. Так загвоздка вот в чем: если пытаюсь компилить прогу с #include .h-файл, то линковщик говорит что не вижу описаний функций таких-то (тех, которые в .h). Приходится компилить вначале .с в .о (gcc -c ...), а потом писать gcc myprog.c .o-файл -o myprog и только тогда все компилится нормально. Расскажите, как надо сделать чтоб моя прога компилилась без всех этих заморочек с .о, как нормальные стандартные библиотеки (gcc myprog.c -o myprog)?
> Написал .h файл, там только дефайны макросов и заголовки функций. Есть
>в том же каталоге файл .с, в котором описания этих функций.
>Так загвоздка вот в чем: если пытаюсь компилить прогу с #include
>.h-файл, то линковщик говорит что не вижу описаний функций таких-то (тех,
>которые в .h). Приходится компилить вначале .с в .о (gcc -c
>...), а потом писать gcc myprog.c .o-файл -o myprog и только
>тогда все компилится нормально. Расскажите, как надо сделать чтоб моя прога
>компилилась без всех этих заморочек с .о, как нормальные стандартные библиотеки
>(gcc myprog.c -o myprog)?разве неучил в чем разница #include <> от #include "" ?
#include "<name-h-file>.h"
>разве неучил в чем разница #include <> от #include "" ?
>#include "<name-h-file>.h"У меня в начале и написано #include "file.h", все равно линковщик ругается, если gcc myptog.c -o myprog
undefined reference to ...
ld returned 1 status, блин!
>>разве неучил в чем разница #include <> от #include "" ?
>>#include "<name-h-file>.h"
>
>У меня в начале и написано #include "file.h", все равно линковщик ругается,
>если gcc myptog.c -o myprog
>undefined reference to ...
>ld returned 1 status, блин!
Попробуй
g++ -Wall myptog.c -o myprog
> Написал .h файл, там только дефайны макросов и заголовки функций. Есть
>в том же каталоге файл .с, в котором описания этих функций.
>Так загвоздка вот в чем: если пытаюсь компилить прогу с #include
>.h-файл, то линковщик говорит что не вижу описаний функций таких-то (тех,
>которые в .h). Приходится компилить вначале .с в .о (gcc -c
>...), а потом писать gcc myprog.c .o-файл -o myprog и только
>тогда все компилится нормально. Расскажите, как надо сделать чтоб моя прога
>компилилась без всех этих заморочек с .о, как нормальные стандартные библиотеки
>(gcc myprog.c -o myprog)?Чтобы собиралось (а не компилилось, кстати) как библиотека, нужно сделать библиотеку mylib.a (man ar), и положить в место, известное линкеру (man ldconfig).
При этом программу все равно придется собирать с флагом -lmy.
То, что вы называете "без заморочек" -- обман зрения. Попробуйте добавить флаг -v к вызову gcc, и станет видно, какие библиотеки и файлы gcc цепляет по умолчанию. Чтобы к ним добавилась ваша библиотека, нужно будет править конфиги (и/или исходники) gcc...
А по хорошему, советую написать makefile, с зависимостью типа
myprog: myprog.o mylib.o
и в дальнейшем говорить make и ничего больше.
>Чтобы собиралось (а не компилилось, кстати) как библиотека, нужно сделать библиотеку mylib.aточнее
libmy.a
>>Чтобы собиралось (а не компилилось, кстати) как библиотека, нужно сделать библиотеку mylib.a
>
>точнее
>libmy.aРазумеется
Спасибо за подробное разъяснение. За что люблю этот форум - это за то что здесь не прикалываются над незнанием и не издеваются, а реально помогают разобраться.
> Написал .h файл, там только дефайны макросов и заголовки функций. Есть
>в том же каталоге файл .с, в котором описания этих функций.
>Так загвоздка вот в чем: если пытаюсь компилить прогу с #include
>.h-файл, то линковщик говорит что не вижу описаний функций таких-то (тех,
>которые в .h).
Ремарка: head file и линковщик в общем случае вещи перпендикулярные (если, конечно, в head file нет опций для линкера)