Как решить проблему дублирования функций при компоновке библиотек? - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть executable, который ссылается на library1.so. Library1.so содержит функцию с именем json_object().

Я пытаюсь улучшить library1, где library1.so будет ссылаться на library2.so. К сожалению, library2.so ссылается на другую библиотеку под названием libjansson.so, которая также экспортирует символ под названием json_object() (API между обеими библиотеками json очень разные).

Теперь я наблюдаю ошибку во время выполнения, где library2.so неправильно вызывает json_object() реализацию из library1.so. Все, что я хочу, это то, что звонки, начинающиеся с library2.so до json_object(), вместо этого звонят в libjansson.so. и вызовы, исходящие из executable или library1.so вызова в json_object() реализацию из library1.so

Как решить эту проблему?

Здесь это то, что я пробовал - я создал libjansson как библиотеку stati c и связал ее с library2.so, чтобы она не появлялась в выводе ldd. Тем не менее, теперь я получаю следующую ошибку времени сборки при попытке построить executable:

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libjansson.a(value.o): in function `json_object':
value.c:(.text+0x189): multiple definition of `json_object'; lib/.libs/liblibrary1.a(json.o):/home/library1/lib/json.c:123: first defined here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...