Программа, над которой я работаю, статически связана с 3rdPartyLibrary.lib.Смешивание различных версий библиотек в коде для Linux
Мы хотели воспользоваться более новой версией той же самой третьей библиотекиPartyLibrary, скажем, 3rdPartyLibraryNewVersion.lib.
Таким образом, решение состоит в том, чтобы включить 3rdPartyLibraryNewVersion.so в качестве динамически связанной библиотеки, которая будет включена через динамическую библиотеку-оболочку, называемую wrapper.so. Мы надеемся одновременно использовать как новую версию, так и старую версию 3rdPartyLibrary, но в разных партиях программы.
Решение, которое мы имеем, заключается в том, чтобы статически связать старую 3rdPartyLibrary и динамически связать с библиотекой-оберткой одновременно с 3rdPartyLibraryNewVersion.
программа --- статически связанная ---> 3rdPartyLibrary.lib. --- динамически связанный -> wrapper.so --- динамически связанный ---> 3rdPartyLibraryNewVersion.so.
Возможно ли это?
Проблема, с которой мы столкнулись, заключается в том, что, хотя wrapper.so работал с тестовым исполняемым файлом, он потерпел неудачу внутри 3rdPartyLibraryNewVersion.so, когда оболочка вызывается из программы, которая статически связана с 3PartyLibrary.lib.
Я сделал что-то не так?
Я знаю, правильный путь, чтобы обновить наш код 3rdPartyLibrary.lib, но это слишком утомительно ...
Спасибо,
Tim
Я знаю, что мы идем по скользкой дорожке, но альтернативный путь нелегкий. В любом случае основной файл из программы указывает, что программа врезалась в файл 3rdPartyLibraryNewVersion.so, согласно gdb. Несколько внутренних вызовов в 3rdPartyLibraryNewVersion были сделаны до отправки SIGSEGV. Можете ли вы рассказать о столкновениях пространства имен? Библиотека обертки, с которой связана ссылка, вызовет вызов 3rdPartyLibraryNewVersion (или, как я полагаю), вы имеете в виду, что программа будет запутана и называется статически связанной библиотекой? – 2009-06-10 18:58:57