Попробовал сделать следующее: два разных каталога содержат две библиотеки. Назовём их A и B.
В библиотеку A входят функции A1, A2, A3 и т.д.
В библиотеку B входят функции B1, B2, B3 и т.д. Причём B2 использует A2
В результате получаю две библиотеки liba.a и libb.a
Пишу программу, использующую эти библиотеки, так вот стоит использовать функцию B2, как в ходе компиляции (на этапе линковки) вылезают ошибки.
К этому сообщению приложен конкретный код. Попытка его откомпилировать приводит к ошибке на этапе линковки. Подскажите, пожалуйста, что я делаю не так ???
Сборка программы, использующей взаимозависимые библиотеки
Модератор: Модераторы разделов
-
AlexRat
- Сообщения: 88
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Сборка программы, использующей взаимозависимые библиотеки
а ты при сборке указываешь -la -lb?
слава роботам!
-
AlexRat
- Сообщения: 88
Re: Сборка программы, использующей взаимозависимые библиотеки
я указываю ./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, то всё ок. Программа компилируется и запускается.
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Сборка программы, использующей взаимозависимые библиотеки
а что хоть говорит? можно полное сообщение?
слава роботам!
-
AlexRat
- Сообщения: 88
Re: Сборка программы, использующей взаимозависимые библиотеки
Код: Выделить всё
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