簡體   English   中英

鏈接C / C ++和Fortran,未解析的外部符號

[英]Linking C/C++ and Fortran, unresolved external symbols

我的Visual Studio 2010解決方案文件用於典型目的,包括一個fortran項目(靜態庫類型,由source1.f90組成),一個C / C ++項目(應用程序類型和包含main.cpp)和13個C / C ++項目(靜態庫類型,包含不同類的不同.cpp / .h文件)。 我的目的是從一個C / C ++靜態庫類型項目中調用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 ++靜態庫項目中的一個類函數調用了fortran函數,但是我得到了相同類型的錯誤( LNK2019 )。

任何幫助將受到高度贊賞。

一個問題是你在C ++中聲明了bar_ftn ,這會導致名稱錯誤 ,也就是你在錯誤信息中看到的奇怪的?bar_ftn@@YAXHPAD@Z文本。 為避免這種情況,您需要在函數聲明之前添加extern "C"

extern "C" void bar_ftn ( int flag_len, char* flag ); // note that 'extern' by itself is unnecessary

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM