Библиотеки Ссылки с gcc - PullRequest
       42

Библиотеки Ссылки с gcc

0 голосов
/ 20 сентября 2019

Проблема касается компиляции исполняемого файла, связанного с набором библиотек.Для примера возьмем следующие имена: 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 -функция-секции -fdata-секции -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 / arguments.o -c src / arguments.c;

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

"g ++" -o build / Debug_x86_64 / lib_dep3.so.0.1.0 build / Debug_x86_64 / src / arguments.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 к связыванию, ошибка исчезнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...