2009-06-10 5 views
0

Программа, над которой я работаю, статически связана с 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

ответ

0

Вы забываете упомянуть как он не используя вашу схему обертки ...

Однако вы это сделаете, вы, вероятно, столкнетесь с столкновениями пространства имен, которые могут привести к сбоям или поведению в непредвиденных ситуациях.

Вы знаете, что нужно делать: обновите свой код. Если это слишком утомительно, то ваш код не должен стоить усилий. Если вам нужно будет программировать работу с новыми функциями, то это стоит обновить. last вещь, которую вы хотите, - создать ситуацию, когда вы теперь привязаны к двум различным и несовместимым версиям одной и той же библиотеки. Если вам нужно будет его поддерживать позже, вы будете пинать себя. Если кто-то еще должен его поддерживать, они будут охотиться на вас и бить вас. Сделайте это правильно.

+0

Я знаю, что мы идем по скользкой дорожке, но альтернативный путь нелегкий. В любом случае основной файл из программы указывает, что программа врезалась в файл 3rdPartyLibraryNewVersion.so, согласно gdb. Несколько внутренних вызовов в 3rdPartyLibraryNewVersion были сделаны до отправки SIGSEGV. Можете ли вы рассказать о столкновениях пространства имен? Библиотека обертки, с которой связана ссылка, вызовет вызов 3rdPartyLibraryNewVersion (или, как я полагаю), вы имеете в виду, что программа будет запутана и называется статически связанной библиотекой? – 2009-06-10 18:58:57