У меня очень сложная группа библиотек и исполняемых файлов (Linux). Вся система была разработана с использованием статических библиотек в прошлом, а затем пару лет назад библиотеки были перенесены на разделяемые библиотеки (-fPIC и т. Д.). Проверка зависимостей я узнал, что есть два общие ЛИЭС: Либ и libB:Построение общих библиотек, которые зависят друг от друга (Linux)
- Lība вызывает некоторые функции из libB
- libB вызывает некоторые функции из Либа
Я хотел бы построить libs, имеющие соответствующие зависимости: libA зависит от libB, а libB зависит от libA. Но я не могу дать «-llibB» компоновщику, потому что lib еще не существует во время сборки libA
Если я создаю libA без зависимости libB (создавая неразрешенные символы), я должен поддерживать в виду, если я использую libA, мне также нужно связать libB из-за неопределенных символов в libA. Это просто!
Что я ищу, это возможность построить libA и сообщить компоновщику, чтобы создать зависимость от libB БЕЗ без libB в это время, возможно ли это?
Как я могу решить свою проблему без объединения libA и libB вместе?
С уважением, Петерс
Edit: я узнал, что я могу напрямую генерировать пустой LIB (без написания исходного кода):
gcc -shared -Wl,-soname,libB.so.$(MAJOR) -o libB.so
то я могу build libA добавляет: -lB к команде сборки. После этого я удалил libB.so. Наконец, после установки libB ссылается на libA, а libA ссылается на libB.
Конечно, MAJOR номер должен соответствовать MAJOR libB, это так, потому что основное число является общим для всех libs.
Я просто спрашиваю себя, есть ли более подходящий способ сделать это?
Я считаю, что это ошибка дизайна. 'libA.so' и' libB.so' должны быть * объединены * в один 'libAB.so' –
Нет, они могут жить независимо друг от друга. Ниже мой ответ. –
Возможно, они могут «быть независимыми», но не должны (поскольку на самом деле они оба зависят от другого). –