Ссылки на библиотеки с gcc

Проблема касается компиляции исполняемого файла, связанного с набором библиотек. Возьмем для примера следующие имена: exec_pgm -> lib_dep1 -> lib_dep2 -> lib_dep3.

exec_pgm использует функции lib_dep1, которые используют функции lib_dep2, и так далее. Это все динамические библиотеки (.so). У каждого двоичного файла есть свой Makefile. В lib_dep3 я не указывал зависимость от librt (опущено -lrt). На моем компьютере я могу скомпилировать без ошибок или предупреждений три библиотеки и исполняемый файл. С другой стороны, на рабочей станции коллеги библиотеки компилируются корректно, но исполняемый файл генерирует ошибки типа

'lib_dep3.so: неопределенная ссылка на "shm_unlink"'.

Первый вопрос, почему компилятор не выдает ошибку при сборке lib_dep3, а я не указываю соединение с librt?

Во-вторых, как получить различие между двумя внешне похожими рабочими станциями? Действительно, у нас обоих есть Ubuntu 18.04 с gcc v7.4.0(7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)).

Вот командные строки, созданные Makefile:

-> Компиляция

"gcc" -fmessage-length=0 -fsigned-char -ffunction-section -fdata-section -Wall -Wextra -DVERSION=0.1.0 -DREVISION=51 -D_DEBUG -ansi -pedantic -std=gnu11 -fPIC -ggdb -Og -Isrc -Iinclude -o build / Debug_x86_64 / src / argument.o -c src / argument.c;

-> Связывание

"g++" -o build/Debug_x86_64/lib_dep3.so.0.1.0 build/Debug_x86_64/src/argument.o build/Debug_x86_64/src/file.o build/Debug_x86_64/src/list.o build/Debug_x86_64/src/mem.o -fmessage-length=0 -fsigned-char -ffunction-section -fdata-section -Wall -Wextra -Xlinker --gc-section -Wl,-Map,"log/lib_dep3-0.1.0.map" -L/usr/local/lib -fPIC -shared -Wl,-soname,lib_dep3.so.0

Если я добавлю к связыванию параметр -lrt, ошибка исчезнет.

0 ответов

Другие вопросы по тегам