- ベストアンサー
c言語とfortranの混在プログラミング
cとfortranの混合プログラミングについての質問です。環境はWindows上でVisual studio 2005/Intel fortran 9.1です。 --c側(ctest6.cpp) #include <stdio.h> extern "C" void __stdcall fsub(){ printf("TEST PROGRAM!!\n"); } --fortran側(ftest6.f90) PROGRAM MAIN call FSUB END --エラー ctest6.obj:error LNK2019:未解決の外部シンボル_fsubが関数_mainで参照されました。 ftest6.obj:error LNK2019:未解決の外部シンボル_FSUBが関数_MAIN_で参照されました。 ftest6.exe:fatal error LNK1120:外部参照2が未解決です。 ---- __stdcall fsub()"の部分を過去の質問等を参考にし、色々(cのfsubを_fsubやfsub_にしたりと"_"を追加したり)と試してみたりしたのですが、上記のエラーがでてしまいます。fortran側で_FSUBと記入できない点が課題な気がしているのですが、ご教授いただけないでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
や, だから, 「呼び出されるルーチン」を (スタティックなりダイナミックなりの) ライブラリにする必要はないのかなぁ, と....
その他の回答 (2)
- redfox63
- ベストアンサー率71% (1325/1856)
C側の関数名を大文字にしてみれば ・・・ void _declspec( dllexport ) __stdcall FSUB() といった具合 ・・・
お礼
指摘していただいた方法もやってみましたが、原因はfortran側(呼び出される側)をスタティックかダイナミック以外で作成することのようでした。ともかくご回答していただきありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
ちょいと調べたらこんなんが出てきました. 試していないので本当かどうかは知りません.
お礼
さっそくのご回答ありがとうございます。 http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200702/07020036.txtのtetrapodさんのアドバイスで fortran側はstaticlibrary,SUBROUTINEですので、 extern "C" void ftest6(); extern "C" void ftest6_(); extern "C" void _ftest6(); 等試してみましたが、同じエラーでした。 ちなみにビルドは cl /c ctest6.cpp ifort ftest6.f90 ctest6.obj /link /out:ftest6.exe で行っております。 ともかく、ご回答ありがとうございます。もう一度マニュアルを読み込んでみます。
お礼
指摘していただいた方法でできました。 ありがとうございます。本当に感謝感謝です!!