Мы используем коммерческое программное обеспечение (например, A.exe), которое использует DSO в качестве плагинов, которые должны определять определенные функции, и один из его плагинов (например, B.so) статически связан с boost-1.43. Согласно документам, B.so не требуется библиотека boost :: filesystem, поэтому он не ссылается на libboost_filesystem.a.
Сейчас я разрабатываю плагин (скажем, C.so), который динамически связан с boost-1.42 (Редактировать: я пробовал boost-1.43 такой же, как плагин B..exe A.exe, он не работал и дал мне показана та же ошибка поиска символов.), и C.so использует файловую систему boost, а ldd C.so показывает, что libboost_filesytem.so можно найти.
Проблема заключается в том, что когда я запускаю свой плагин C.so через A.exe, он говорит: «A.exe: ошибка поиска символа: B.so неопределенное повышение символа :: filesystem :: detail :: status_api (...)».
Затем, когда я отлаживаю его, запустив nm на B.so (плагин поставляется с A.exe) для поиска символов, я нахожу, что запускаю "nm -D -C B.so | grep 'U' | grep boost "в оболочке дает мне" U boost :: filesystem :: detail :: status_api ", что означает, что B.so имеет неопределенную символьную запись.
Я так растерялся, что:
1) Будет ли вообще работать этот способ смешивания буст-версий?
2) Если, как сказано в документах A.exe, некоторые библиотеки расширения были статически связаны (очевидно, файловая система не нужна, поэтому не связана), почему я получаю неопределенную запись символа при запуске "nm -D -C B.so" ( -D для динамического символа, -C для разборки имен), и особенно для повышения файловой системы lib?
3) Почему я получаю «ошибку поиска символов» при запуске моего плагина C.so через A.exe? Должен ли мой плагин C.so просто искать уже связанную библиотеку надстроек, предоставленную мной? а не тот, который статически связан в плагине B.so?
4) Будет ли основной exe всегда искать первую зарегистрированную запись символа, даже используя систему плагинов, а не ту, что связана с моим плагином?
5) Это из-за конфликта версий между двумя плагинами?
Есть какие-нибудь документы о том, как символы импортируются при загрузке плагинов?
Любая помощь будет оценена.