Как разрешить специфичные для компилятора функции инициализации среды выполнения для библиотеки из основного приложения - PullRequest
1 голос
/ 12 июля 2010

Какова лучшая практика при работе со смешанной языковой библиотекой, где язык библиотеки требует инициализации во время выполнения?

У меня проблема, когда я хотел бы создать определенную библиотеку в Fortran, которая будет использоваться изC ++.Я бы хотел сохранить независимость от платформы и независимость от компилятора, если это возможно.Теперь два компилятора, с которыми я играл, G95 и GFortran требуют, чтобы основное приложение вызывало определенные специфичные для компилятора подпрограммы инициализации для правильной настройки среды выполнения перед использованием библиотеки.Эти функции имеют разные имена и подписи в зависимости от компилятора (для G95 функция void g95_runtime_start (int argc, char * argv []))

Я использую CMake для управления проектом, а подпроект библиотеки -статическая библиотека.Должен ли я как-то в своем файле cmake для основного приложения выяснить, какой компилятор fortran используется для подпроекта библиотеки, а затем позволить CMake создать определение в главном проекте, чтобы я мог условно скомпилировать основное приложение с помощью любой подпрограммы init?Это очень неловко.Есть ли лучший способ?

1 Ответ

1 голос
/ 06 августа 2010

В autoconf поддерживается поддержка искажения имени и альтернативной сети (AC_FC_MAIN).Я знаю, что некоторые обсуждения обсуждались и в cmake group , поэтому он может быть доступен в модуле FortranCinterface.Однако я не мог найти никаких документов по этому вопросу.Я предпочитаю работать с autotools над cmake, потому что проблемы такого типа уже решены и хорошо документированы.

...