Использование библиотеки, написанной на C ++ из чистого проекта C в Linux?

Нашел этот оператор в PSE : (цитируя Боб )

Один из моих любимых приемов в Windows и Mac OS не работает в Linux. Этот прием заключается в том, чтобы написать DLL / dylib с использованием внутренних компонентов C ++, экспортировать C API, а затем иметь возможность звоните в него из программ C. Общие объекты Linux (локальный эквивалент DLL) не могут сделать это легко, потому что стандартная библиотека C ++ .so отсутствует в пути поиска по умолчанию. Если вы не сделаете кучу странных вещей со своей программой на C, она выйдет из строя , как только динамически загрузит ваш .so во время выполнения: ваш .so попытается динамически загрузить стандартная библиотека. Итак, она ее не найдет, и ваша программа выйдет.

Я нахожу это немного странным. Насколько это точно с учетом возможных различий между основными настольными / серверными дистрибутивами Linux?

Это чисто из любопытства, поскольку в настоящее время я занимаюсь программированием только для Windows (C ++).


Что касается Windows, мне пришлось немного поискать, и я помещу его здесь для справки: Исполняемый файл C ++ обычно ссылается на MSVCR * .DLL для C std и MSVCP * .DLL для содержимого STL, которое находится в этой DLL. Оба они либо находятся в каталоге system32, либо, для проявленного материала, они будут находиться в подкаталоге кэша Windows SideBySide ( папка winsxs ).

5
задан Community 12 April 2017 в 07:31
поделиться