Я хочу предварить это важным примечанием, что Я не программист на C / C ++ и знаю очень мало о том, как работает связывание библиотек в C.
Наш код использует libstdc ++. So.6 (gcc 3.4, я думаю). У нас есть сторонние предварительно скомпилированные (с закрытым исходным кодом) библиотеки, которые используют libstdc ++. So.5 (я думаю, что gcc 2.something или 3.2). Это на Linux. У нас есть как .a, так и .so версия сторонней библиотеки lib.
Возможно ли построить наше приложение с библиотеками сторонних разработчиков? Как? Возможно ли построить / запустить наше приложение без установки libstdc ++. So.5 наших машин, как?
Если я забыл некоторую важную информацию, пожалуйста, дайте мне знать - я едва знаю, что относится к этому материалу. Я понимаю, что полный ответ, вероятно, будет невозможен; Я действительно ищу направление и руководство. Статическое связывание этого, динамическое то, перестройте это, предварительно соберите то-то, переключитесь на версию x, или символическую ссылку на викторину и т. Д.
Обновление:
Мы попытались использовать dlopen
с RTLD_LOCAL
, чтобы изолировать стороннюю библиотеку от остальной части нашего приложения. Похоже, что в основном сработало, однако у нас остались большие утечки памяти по неизвестным причинам. Мы подозреваем, что, когда мы вызываем dlopen
, сторонняя библиотека извлекает символы, такие как malloc
из уже загруженного .so.6, и вещи запутываются.
Для хихиканья мы попытались поместить стороннюю библиотеку в LD_PRELOAD
, затем запустили наше приложение, и утечки памяти, кажется, полностью исчезли.