プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (3件)

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

.
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/02 14:39

C側の関数名を大文字にしてみれば ・・・


void _declspec( dllexport ) __stdcall FSUB()
といった具合 ・・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/02 14:43

ちょいと調べたらこんなんが出てきました.


試していないので本当かどうかは知りません.

参考URL:http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng. …
    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございます。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng. …の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
で行っております。
ともかく、ご回答ありがとうございます。もう一度マニュアルを読み込んでみます。

お礼日時:2008/10/01 23:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!