Попытка связать мой исполняемый файл C ++ с библиотекой Fortran (среда Cygwin) - PullRequest
3 голосов
/ 28 февраля 2011

Все мои источники на Фортране скомпилированы в порядке с

gfortran -g -c fortran_source.f

и заархивированы в одной библиотеке под названием "mylibrary.a". Там есть интересующая функция под названием "myfunction"

В моем файле C ++ у меня есть:

extern "C" void myfunction_(/* all pointers */);
int main(){
cerr << "Mark 1" << endl;
myfunction_(/* all pointers or address_of my variables */);
cerr << "Mark 2" << endl;
}

Я компилирую свой исполняемый файл c ++, связывая библиотеку с

g++ mainfile.cpp -L./ -lmylibrary -lgfortran 

Нет ошибок или предупреждений ...

Однако, когда я запускаю свою программу, она зависает в первой точке, где вызывается myfunction (выводит «Mark1», но не «Mark 2») ...

Обратите внимание, что эта программа правильно собирается и работает на компьютере с Linux сifort (link -lifcore).

Большое спасибо!

1 Ответ

2 голосов
/ 28 февраля 2011

Вам нужно назвать библиотеку libMyLibrary.a и поместить ее в свой текущий каталог, затем вы можете связать ее, используя

g++ mainfile.cpp -L. -lMyLibrary

или

g++ mainfile.cpp ./libMyLibrary.a

Вы можете поместить библиотеку в другое место. В первом случае вы бы изменили -L. на -L/path/to/the/lib, во втором ./libMyLibrary.a на /path/to/the/lib/libMyLibrary.a

...