Разделяемая библиотека и статическая линковка
От: Аноним  
Дата: 23.04.11 11:25
Оценка:
Привет всем!

Была у меня на днях одна проблема...

Дано:

1. Система Linux c установленными компиляторами gcc 2.95.4 и 4.3.1.
2. gcc 2.95.4 установлен в /usr, 4.3.1 — в /usr/local.
3. Разделяемая библиотека (so) написанная на С++, но имеющая pure C интерфейс. Библиотека компилируется только gcc 4.3.1.
4. Несколько приложений (тестовых) на Си и С++, собранных 2.95.4 (тип 1) и 4.3.1 (тип 2), использующих эту библиотеку.

Если мы используем библиотеку из приложений типа 2 (не важно С или С++), то все нормально, что в принципе ожидаемо.
Если мы используем библиотеку из приложений типа 1 (не важно С или С++), то появляется ошибка сегментации.

Прблема в С++ runtime. Он пытается использовать его от 2.95.4. Пока что решение проблемы состоит в том, чтобы линковать С++ runtime статически к библиотеке. В этом случае ошибки пропадают.

А вопрос такой: вот допустим библиотека захочет использовать какую-нибудь so-шку, написанную на C++, которая С++ runtime линкует динамически. Все обвалится. Каким бы таким хитрым образом изменить способ решения проблемы, чтобы этого избежать? Я пробовал колдовать с -rpath-link, но к положительным результатм не пришел.

Самое главное — избежать лишних телодвижений со стороны пользователей библиотеки. То есть они должны писать

gcc mycpp.c -l<lib name> -o myapp

и получать работающее приложение.

Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.