• ベストアンサー

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と記入できない点が課題な気がしているのですが、ご教授いただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

や, だから, 「呼び出されるルーチン」を (スタティックなりダイナミックなりの) ライブラリにする必要はないのかなぁ, と....

Kojisief
質問者

お礼

指摘していただいた方法でできました。 ありがとうございます。本当に感謝感謝です!!

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

C側の関数名を大文字にしてみれば ・・・ void _declspec( dllexport ) __stdcall FSUB() といった具合 ・・・

Kojisief
質問者

お礼

指摘していただいた方法もやってみましたが、原因はfortran側(呼び出される側)をスタティックかダイナミック以外で作成することのようでした。ともかくご回答していただきありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ちょいと調べたらこんなんが出てきました. 試していないので本当かどうかは知りません.

参考URL:
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200702/07020036.txt
Kojisief
質問者

お礼

さっそくのご回答ありがとうございます。 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 で行っております。 ともかく、ご回答ありがとうございます。もう一度マニュアルを読み込んでみます。

関連するQ&A