У меня есть 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