Если я хочу динамически связать разделяемую библиотеку (.so) для приложения C ++ (созданного с помощью g ++) с использованием LD_PRELOAD, имеет ли значение, генерируется ли .so из исходного файла C (с использованием gcc) или исходного файла C ++ (используя g ++)? А почему или почему нет?
Спасибо, что помогли мне понять это.
Да, исполняемый файл C ++ может быть связан (как статически, так и динамически) с библиотекой C.
Это совершенно умышленно. C ++ ABIs предназначенный быть обратно совместимым.
Вы должны будете убедиться, что объявления функций и т. Д. Символов библиотеки, как написано в вашей C ++ программе, помечены extern "C"
для обозначения того, что вы пересекаете языковую границу. Как правило, собственные отправленные заголовочные файлы библиотеки сделают это за вас.
Неважно, как был создан .so. Вы должны быть в состоянии предварительно загрузить .so, который также был сгенерирован из кода FORTRAN. Ключевой вопрос — убедиться, что вы правильно используете символы в .so.
Когда .so генерируется из кода C, имена символов не исправлены.
Когда .so генерируется из кода C ++, имена символов искажаются.
Я не уверен, что имена символов в .so, сгенерированные из FORTRAN, искажены.