Разрешение символа общего объекта

Предположим, у меня есть 2 статические библиотеки S1 и S2, которые являются разными версиями одной и той же библиотеки и имеют один и тот же интерфейс C (не C++), хотя реализации разные. 2 общие библиотеки D1 и D2, каждая из которых ссылается только на S1 или S2. Предположим, что приложение A связывается с S2, которая является более поздней из статических библиотек, и динамически загружает D1 и D2 с dlopen. Будет ли D1 использовать только функции S1s или есть способ заставить его использовать функции S2s? Может ли что-то пойти не так в этой настройке?

РЕДАКТИРОВАТЬ: Является ли создание общего объекта S хорошим способом обойти эту проблему, поскольку тогда D1 и D2 могут ссылаться на S?


person nakiya    schedule 14.10.2010    source источник


Ответы (1)


Будет ли D1 использовать только функции S1s или есть способ заставить его использовать функции S2s?

Да, D1 будет использовать S1 функции. Нет, вы не можете принудительно использовать S2 функции.

Может ли что-то пойти не так в этой настройке?

Это зависит от того, что находится внутри ваших библиотек.

person Didier Trosset    schedule 14.10.2010
comment
Что вы имеете в виду под тем, что находится внутри библиотек? Мне непонятно. - person nakiya; 14.10.2010
comment
Я имею в виду, что это зависит от того, что находится внутри S1 и S2. Например, если у них есть глобальные статические данные, они не будут разделены между ними. Это может быть или не быть тем, что вы хотите. - person Didier Trosset; 14.10.2010