повысить версию конфликта между статически связанной библиотекой и динамически библиотекой? - PullRequest
1 голос
/ 27 марта 2012

Мы используем коммерческое программное обеспечение (например, 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) Это из-за конфликта версий между двумя плагинами?

Есть какие-нибудь документы о том, как символы импортируются при загрузке плагинов?

Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...