簡體   English   中英

使用ICL / IFORT將C ++鏈接到Fortran時遇到問題

[英]Having trouble linking C++ to Fortran using ICL/IFORT

因此,我正在遵循http://difdop.polytechnique.fr/wiki/index.php/How_to_Bessel_Functions_in_C中的示例

除了我要使用Intel編譯器ICL和IFORT代替gcc和g77。

我在C ++中擁有的代碼是:

extern "C" void zbesj_(double*, double*, double*, int*, int*, double*, double*, int*, int*);
typedef std::complex<double> CplxDbl;

CplxDbl besselj(double nu, CplxDbl z)
{
    int kode=1;
    int n=1;
    double zr=z.real();
    double zi=z.imag();
    int nz,ierr;
    double cyr[1],cyi[1];
    CplxDbl res;

    zbesj_(&zr,&zi,&nu,&kode,&n,cyr,cyi,&nz,&ierr);
    if(ierr!=0){
        printf("error!\n");
    }

    return CplxDbl(cyr[0],cyi[0]);
}

int _tmain(int argc, _TCHAR* argv[])
{
    CplxDbl J0=besselj(0.0,CplxDbl(0.1,0.2));
        printf("\nJ0(0.1+0.2i)= %.17f  %+.17f I\n",J0.real(),J0.imag());

        return 0;
}

此外,我還有zbesj.f及其所有依賴項。 我嘗試過先打電話給ICL,然后再打電話給IFORT,反之亦然。 不編譯:(

icl -c CallFortranFromC.cpp
ifort -o test CallFortranFromC.obj *.f

總是以相同的鏈接器錯誤結尾:

CallFortranFromC.obj : error LNK2019: unresolved external symbol zbesj_ referenced in function main 
test.exe : fatal error LNK1120: 1 unresolved externals

任何幫助表示贊賞!

在鏈接階段,符號名稱不匹配。 如果您這樣做:

dumpbin  /SYMBOLS zbesj.obj

您會看到目標文件中的符號名稱為大寫且沒有尾隨的UNDERSCORE。

最簡單的解決方法是(假設您不想更改C代碼):

icl -c CallFortranFromC.cpp
ifort  /names:lowercase /assume:underscore  -o test CallFortranFromC.obj *.f

暫無
暫無

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

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