Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 链接C+时遇到问题+;使用ICL/IFORT转换为Fortran_C++_Linker Errors_Intel Fortran - Fatal编程技术网

C++ 链接C+时遇到问题+;使用ICL/IFORT转换为Fortran

C++ 链接C+时遇到问题+;使用ICL/IFORT转换为Fortran,c++,linker-errors,intel-fortran,C++,Linker Errors,Intel Fortran,所以我遵循的是 除了我尝试使用英特尔编译器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;

所以我遵循的是

除了我尝试使用英特尔编译器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;
}
始终以相同的链接器错误结束:

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

感谢您的帮助

链接阶段中的符号名称不匹配。如果您这样做:

dumpbin  /SYMBOLS zbesj.obj
您将看到对象文件中的符号名是大写的,并且没有尾随下划线

最简单的修复方法是(假设您不想更改C代码):

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