典型的な目的のための私の Visual Studio 2010 ソリューション ファイルは、1 つの fortran プロジェクト (静的ライブラリ タイプで、source1.f90 で構成される)、1 つの C/C++ プロジェクト (アプリケーション タイプで、main.cpp を含む)、および 13 の C/C++ プロジェクト (スタティック ライブラリ タイプであり、クラスごとに異なる .cpp/.h ファイルが含まれています)。私の目的は、C/C++ スタティック ライブラリ タイプ プロジェクトの 1 つから Fortran ソース ファイル内のいくつかの関数を呼び出すことですが、プログラムをビルドできず、エラーが発生しています。
私の最初の試みは、main.cpp から fortran サブルーチンを呼び出すことでした。しかし、次のエラーが発生します。
Error 2 error LNK2019: unresolved external symbol "void __cdecl
bar_ftn(int,char *)" (?bar_ftn@@YAXHPAD@Z) referenced in function _main
G:\VS2010\uakron\sourcefiles\application\main.obj
Error 3 error LNK1120: 1 unresolved externals G:\VS2010\uakron
\build\win\debug\application_app.exe 1
source1.f90
subroutine bar_ftn ( len_input_file, input_file ) bind( c )
use, intrinsic :: iso_c_binding, only : c_int
implicit none
integer(c_int), value, intent(in) :: len_input_file
character(len=1), intent(in) :: input_file(len_input_file)
! Local declarations (copy c char array into fortran character)
character(len=len_input_file) :: infile
integer :: i
print *, "in bar_ftn"
print *, len_input_file
do i=1,len_input_file
end do
end subroutine bar_ftn
main.cpp
#include<iostream>
#include<fstream>
using namespace std;
extern void bar_ftn ( int flag_len, char* flag );
static void
DisplayUsage(char* programName);
int main(int argc, char *argv[])
{
char ctext[]="helloworld abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz";
int ctext_len=sizeof(ctext);
//Call the Fortran
bar_ftn( ctext_len, ctext );
return 0;
}
一方、C/C++ スタティック ライブラリ プロジェクトのいずれかのクラス関数の 1 つから fortran 関数も呼び出しましたが、同じタイプのエラーが発生しています ( LNK2019
)。
どんな助けでも大歓迎です。