Сборка программы, использующей взаимозависимые библиотеки

Модератор: Модераторы разделов

Аватара пользователя
AlexRat
Сообщения: 88

Сборка программы, использующей взаимозависимые библиотеки

Сообщение AlexRat »

Попробовал сделать следующее: два разных каталога содержат две библиотеки. Назовём их A и B.
В библиотеку A входят функции A1, A2, A3 и т.д.
В библиотеку B входят функции B1, B2, B3 и т.д. Причём B2 использует A2
В результате получаю две библиотеки liba.a и libb.a
Пишу программу, использующую эти библиотеки, так вот стоит использовать функцию B2, как в ходе компиляции (на этапе линковки) вылезают ошибки.

К этому сообщению приложен конкретный код. Попытка его откомпилировать приводит к ошибке на этапе линковки. Подскажите, пожалуйста, что я делаю не так ???
Мой блог
Ubuntu 7.04
Windows XP SP2
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Сборка программы, использующей взаимозависимые библиотеки

Сообщение elide »

а ты при сборке указываешь -la -lb?
слава роботам!
Спасибо сказали:
Аватара пользователя
AlexRat
Сообщения: 88

Re: Сборка программы, использующей взаимозависимые библиотеки

Сообщение AlexRat »

elide писал(а):
25.10.2005 17:29
а ты при сборке указываешь -la -lb?

я указываю ./a/liba.a ./b/libb.a
Точнее, вот строка для сборки:
gcc -O3 -D_REENTRANT -Wall -o test test.c ./lowlevel/liblowlevel.a ./sbdl/libsbdl.a
Причём если не использовать функцию из libsbdl.a, которая вызывает функцию из liblowlevel.a, то всё ок. Программа компилируется и запускается.
Мой блог
Ubuntu 7.04
Windows XP SP2
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Сборка программы, использующей взаимозависимые библиотеки

Сообщение elide »

а что хоть говорит? можно полное сообщение?
слава роботам!
Спасибо сказали:
Аватара пользователя
AlexRat
Сообщения: 88

Re: Сборка программы, использующей взаимозависимые библиотеки

Сообщение AlexRat »

elide писал(а):
25.10.2005 18:24
а что хоть говорит? можно полное сообщение?

Код: Выделить всё

gcc -O3 -D_REENTRANT -Wall -o test test.c ./lowlevel/liblowlevel.a ./sbdl/libsbdl.a
./sbdl/libsbdl.a(sbdl_free.o): In function `sbdl_free':
/home/AlexRat/my/less02/sbdl/sbdl_free.c:12: undefined reference to `_freeMemory'
./sbdl/libsbdl.a(sbdl_removeitem.o): In function `sbdl_removeitem':
/home/AlexRat/my/less02/sbdl/sbdl_removeitem.c:22: undefined reference to `_freeMemory'
./sbdl/libsbdl.a(sbdl_setitem.o): In function `sbdl_setitem':
/home/AlexRat/my/less02/sbdl/sbdl_setitem.c:11: undefined reference to `_allocateMemory'
./sbdl/libsbdl.a(sbdl_fappend.o): In function `sbdl_fappend':
/home/AlexRat/my/less02/sbdl/sbdl_fappend.c:15: undefined reference to `_file_size'
/home/AlexRat/my/less02/sbdl/sbdl_fappend.c:16: undefined reference to `_file_exists'
/home/AlexRat/my/less02/sbdl/sbdl_fappend.c:20: undefined reference to `_allocateMemory'
collect2: ld returned 1 exit status
make: *** [test] Error 1


Если поменять библиотеки местами:

Код: Выделить всё

gcc -O3 -D_REENTRANT -Wall -o test test.c ./sbdl/libsbdl.a ./lowlevel/liblowlevel.a
./sbdl/libsbdl.a(sbdl_fappend.o): In function `sbdl_fappend':
/home/AlexRat/my/less02/sbdl/sbdl_fappend.c:16: undefined reference to `_file_exists'
collect2: ld returned 1 exit status
make: *** [test] Error 1
Мой блог
Ubuntu 7.04
Windows XP SP2
Спасибо сказали: