Будет ли скомпилированный язык .so работать с приложением C ++?

Если я хочу динамически связать разделяемую библиотеку (.so) для приложения C ++ (созданного с помощью g ++) с использованием LD_PRELOAD, имеет ли значение, генерируется ли .so из исходного файла C (с использованием gcc) или исходного файла C ++ (используя g ++)? А почему или почему нет?

Спасибо, что помогли мне понять это.

4

Решение

Да, исполняемый файл C ++ может быть связан (как статически, так и динамически) с библиотекой C.

Это совершенно умышленно. C ++ ABIs предназначенный быть обратно совместимым.

Вы должны будете убедиться, что объявления функций и т. Д. Символов библиотеки, как написано в вашей C ++ программе, помечены extern "C" для обозначения того, что вы пересекаете языковую границу. Как правило, собственные отправленные заголовочные файлы библиотеки сделают это за вас.

5

Другие решения

Неважно, как был создан .so. Вы должны быть в состоянии предварительно загрузить .so, который также был сгенерирован из кода FORTRAN. Ключевой вопрос — убедиться, что вы правильно используете символы в .so.

Когда .so генерируется из кода C, имена символов не исправлены.

Когда .so генерируется из кода C ++, имена символов искажаются.

Я не уверен, что имена символов в .so, сгенерированные из FORTRAN, искажены.

1

По вопросам рекламы [email protected]