Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вызов процедуры из .f90 в С++


Автор: vitaliska 21.4.2006, 00:53
Здравствуйте!
Никак не могу решить проблему с линковкой при смешанном программировании. 
Есть процедуры на фортране (Intel Fortran Compiler 8.1 /интегрирован в MVS 2003/). Нужно вызвать их в C++ (MVS 2003).
Беру пример из книги:
Файл f90:
 
 
SUBROUTINE FR1(N, M) 
Рњ = N * N 
RETURN 
END 
INTEGER FUNCTION FF1(N) 
FF1 = N * N * N 
RETURN 
END 
 
Файл .cpp

#include <iostream.h> 
extern "C" 

void    __stdcall FRl(int *, int *); 
int    __stdcall FFl(int *); 
}
void main
{
int трали-вали
FRl(&n,&что-нибудь)
и так далее...
}

Теперь: в проекте и в директории у меня .cpp и .f90. Что еще нужно для линковки? Никаких библиотек нет. 
В чем причина error lnk2019 unresolved ...
Почему не понимает обращение к процедуре? Что я забыл сделать?
Нужен ли хедер-файл? Если да то почему про него нет ни в одной книге и ни в одном примере в сети. По гуглу смотрел - практически одинаковые примеры и нет полного описания как что соединять нужно - только файлы фортрана и си++.   
Объясните пожалуйста... заранее спасибо!




 
  






  

Автор: Earnest 21.4.2006, 07:45
Из сообщения линкера "unresolved ..." можно сделать вывод, чего же ждет компоновщик. А ты его как раз не привел. 

Автор: vitaliska 21.4.2006, 10:54
Моя процедура в f90 называется PLUS. Все по аналогии с примером выше.
Вот что пишет компоновщик:
Проект: Use_oper
Use_oper error LNK2019: unresolved external symbol _PLUS@8 referenced in function _main
Use_oper fatal error LNK1120: 1 unresolved externals

Вот с dll кое-как работает через _declspec(dllimport), но мне бы хотелось работать напрямую с процедурами без создания dll.


  

Автор: Earnest 21.4.2006, 11:33
Цитата(vitaliska @  21.4.2006,  11:54 Найти цитируемый пост)
но мне бы хотелось работать напрямую с процедурами без создания dll.

Это в смысле прямо подключать к модулю объектный файл?

А как ты эту процедуру для cpp объявляешь? Точно не забыл случайно extern "C"? 
Вот это "_PLUS@8" больно похоже на декорированное cpp-имя, чего не должно быть, если процедура объявлена как extern "C". 
А еще я бы посмотрела внутрь obj-файла (фортрановского), как там функция называется... 

Автор: MIG 21.4.2006, 15:05
хрень какая-то 

Автор: vitaliska 21.4.2006, 18:41
MIG  - твой комментарий нам очень помог...спасибо...

Везде пишут примеры на f и на си, а как дальше все это выполнять (OC - xp sp2) - опускается...  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)