http://www.linuxcenter.ru/lib/books/linuxdev/linuxdev6.phtml
Так-то я вроде всё понял. С этим тоже разобрался
http://pyviy.blogspot.com/2010/12/gcc.html
Но некоторые тык скыть непонятности остались.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++=
Исходники. Взял из статьи и сильно-сильно упростил
main.c
Код: Выделить всё
////////////////////////////////////////
// main.c
#include <stdio.h>
#include "calculate.h"
int main(void)
{
printf ("%f\n", Calculate());
return 0;
}
calculate.c
Код: Выделить всё
//////////////////////////////////
// calculate.c
#include <stdio.h>
#include <math.h>
#include "calculate.h"
float Calculate()
{
float x = sin(3);
return(sin(2));
}
calculate.h
Код: Выделить всё
///////////////////////////////////////
// calculate.h
#ifndef CALCULATE_H_
#define CALCULATE_H_
#ifdef __cplusplus
extern "C" {
#endif /*__cplusplus*/
float Calculate();
#ifdef __cplusplus
}
#endif /*__cplusplus*/
#endif /*CALCULATE_H_*/
+++++++++++++++++++++++++++++++++++++++++++++++++++++++=
Обратимся к статье:
Давайте создадим подключаемую библиотеку из исходника calculate.c. Для этого вначале создадим объектный файл.
Shell
user@astra:~libtooldemo$ libtool compile gcc -c calculate.c
libtool: compile: gcc -c calculate.c -fPIC -DPIC -o .libs/calculate.o
libtool: compile: gcc -c calculate.c -o calculate.o >/dev/null 2>&1
user@astra:~$
Наконец сформируем саму библиотеку.
Shell
user@astra:~$
user@astra:~$ libtool link gcc -rpath /usr/local/lib -o libcalculate.la calculate.lo
libtool: link: gcc -shared -fPIC -DPIC .libs/calculate.o -Wl,-soname -Wl,libcalculate.so.0 -o .libs/libcalculate.so.0.0.0
libtool: link: (cd ".libs" && rm -f "libcalculate.so.0" && ln -s "libcalculate.so.0.0.0" "libcalculate.so.0")
libtool: link: (cd ".libs" && rm -f "libcalculate.so" && ln -s "libcalculate.so.0.0.0" "libcalculate.so")
libtool: link: ar cru .libs/libcalculate.a calculate.o
libtool: link: ranlib .libs/libcalculate.a
libtool: link: ( cd ".libs" && rm -f "libcalculate.la" && ln -s "../libcalculate.la" "libcalculate.la" )
user@astra:~$
Ерунда какая-то по-моему, нет? libcalculate.a сам по себе, содержит ссылку на sin(), при чём тут libcalculate.so? libcalculate.a и libcalculate.so друг без друга вполне себе существуют и проект компилится как с одной, так и с другой библиотекой по отдельности. Так что что там за ссылка, я понять не могу, не разъяснит ли кто-нибудь? Спасибо, кто откликнется.Содержимое файла libcalculate.a связывается с программой при компоновке, но библиотечных функций этот файл не содержит. Она содержит лишь ссылку на другой файл – libcalculate.so, который содержит библиотечные функции и связывается с программой динамически, то есть, по требованию в процессе выполнения программы.