У меня есть динамическая библиотека, которая предоставляет сервисы onvif, связывая с libgsoapssl ++. Статическую библиотеку из gsoap, которую я перекомпилировал с -fPIC.
Затем я связываю эту динамическую библиотеку с исполняемым файлом, который использует ееСервисы.Когда я запускаю этот исполняемый файл, я получаю:
symbol lookup error: /usr/lib/libonvif.so: undefined symbol: soap_base64o
Кажется, что символ определен в динамической библиотеке, как показано в nm:
nm libonvif.so | grep soap_base64
00000000008cec40 T soap_base642s
0000000000914b60 R soap_base64i
0000000000914bc0 R soap_base64o
Исполняемый файл (onvifcl) выглядит правильнозависит от статической библиотеки (libonvif.so):
ldd onvifcl
linux-vdso.so.1 (0x00007ffe623f6000)
libonvif.so => /usr/lib/libonvif.so (0x00007f4e09b86000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4e097fd000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4e095e5000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4e091f4000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4e08e56000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4e0aa54000)
Я в недоумении, почему символ не определен.Кто-нибудь знает, что мне здесь не хватает?
Кстати, эта проблема возникла при разработке потенциального решения проблемы, которую я пытаюсь решить.Я пытаюсь использовать boost.python, чтобы обернуть классы динамической библиотеки, чтобы я мог получить к ней доступ из Python3.Это вызвало ошибки сегментации только при доступе к определенным структурам или методам gsoap, что привело меня к рассмотрению неразрешенных ссылок.Компиляция библиотеки gsoap в разделяемую библиотеку может решить эту проблему, но я не могу найти много, как это сделать.Если у кого-то есть идеи на этот счет или лучшая альтернатива boost.python, я был бы признателен за это.