[英]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.