Как смешать Фортран и С ++ в Visual Studio 2010?

Я пытаюсь вызвать функцию c ++ из основной программы Fortran. Для этого я выполнил следующие шаги в Visual Studio 2010:
Создание проекта статической библиотеки C ++

  1. В строке меню выберите Файл, Новый, Проект.
  2. На левой панели диалогового окна «Новый проект» разверните Установленные, Шаблоны, Visual C ++, а затем выберите Win32.
  3. На центральной панели выберите Консольное приложение Win32.
  4. Укажите имя для проекта, например, MathFuncsLib, в поле «Имя». Укажите имя для решения, например, StaticLibrary, в поле «Имя решения». Выберите кнопку ОК.
  5. На странице «Обзор» диалогового окна «Мастер приложений Win32» нажмите кнопку «Далее».
  6. На странице «Настройки приложения» в разделе «Тип приложения» выберите «Статическая библиотека».
  7. На странице «Параметры приложения» в разделе «Дополнительные параметры» снимите флажок «Прекомпилированный заголовок».
  8. Нажмите кнопку Готово, чтобы создать проект.

Чтобы создать исполняемый проект Fortran

  1. В строке меню выберите Файл, Новый, Проект.
  2. На левой панели диалогового окна «Новый проект» разверните Установленные, Шаблоны, Intel (R) Visual Fortran и выберите Консольное приложение.
  3. На центральной панели выберите «Пустой проект».
  4. Укажите имя для проекта, а затем Укажите имя для решения. В окне решения выберите «Добавить в решение». Выберите кнопку ОК.

Кроме того, я делаю некоторые настройки в Visual Studio, как показано ниже:

  1. Щелкните правой кнопкой мыши исполняемый проект Fortran и выберите «Зависимости», чтобы установить исполняемый проект как зависимый от проекта статической библиотеки.
  2. Щелкните правой кнопкой мыши по исполняемому проекту и выберите Set as Startup Project, чтобы вы могли его собрать и отладить.
    У меня есть ниже основная программа Fortran и функция C ++.

Фортран программа

    program main

use iso_c_binding, only : C_CHAR, C_NULL_CHAR

implicit none

interface
subroutine print_C ( string ) bind ( C, name = "print_C" )
use iso_c_binding, only : C_CHAR
character ( kind = C_CHAR ) :: string ( * )
end subroutine print_C
end interface

call print_C ( C_CHAR_"Hello World!" // C_NULL_CHAR )

end

Функция C ++

# include <stdlib.h>
# include <stdio.h>

extern "C" void print_C (char *text)
{
printf("%s\n", text);
}

Когда я собираю программу, я сталкиваюсь со следующими ошибками:

Error 1: error LNK2019: unresolved external symbol _print_C referenced in function _MAIN__  Fortranmain.obj
Error 2: fatal error LNK1120: 1 unresolved externals    Debug\Fortranmain.exe

Кто-нибудь может мне помочь? Любое предложение будет высоко ценится.

3

Решение

Вам необходимо связать библиотеку C ++ с исполняемым файлом Fortran. Зависимости указывают порядок сборки.

  1. Щелкните правой кнопкой мыши исполняемый проект Fortran и выберите «Свойства».
  2. Добавьте каталог, содержащий библиотеку сборки C ++, в Свойства конфигурации -> Компоновщик — Общие сведения -> Дополнительные каталоги библиотеки (возможно, этот шаг не нужен)
  3. Добавьте файл библиотеки C ++ .lib в Свойства конфигурации -> Компоновщик -> Ввод -> Дополнительные зависимости
2

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


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