C++ 链接C+时遇到问题+;使用ICL/IFORT转换为Fortran
所以我遵循的是 除了我尝试使用英特尔编译器ICL和IFORT,而不是gcc和g77 <>我在C++中的代码是: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;
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