我正在尝试编译一个 c++ 程序,但它不起作用。首先,我应该说 c++ 不是我真正了解的语言,我使用 Fortran。无论如何,主 c++ 程序调用一个 fortran 子例程。我可以编译这个子例程,但是当我想编译 c++ 程序时,会出现链接错误。真正的程序很大,调用了很多子程序,所以我做了一个简单的测试(简单的程序只调用了一个子程序),它也不能正常工作!当我想创建 .x 时,我的子程序是未定义的。这是 c++ 程序 (test-TQINIT.cpp) 和子例程 (TQINIT.f)。
测试-TQINIT.cpp:
#include <iostream>
using namespace std;
extern "C"
{
void TQINIT_(int*, int*);
}
main()
{ int NWG;
NWG=80000;
int *IWSG = new int[NWG];
TQINIT_(IWSG,&NWG);
}
TQINIT.f:
SUBROUTINE TQINIT(IWSG,NWG)
IMPLICIT NONE
INTEGER NWG
INTEGER IWSG(NWG)
LOGICAL TQG2ERR
INTEGER IERR
CALL TQRSERR
CALL TQINI(NWG,IWSG)
IF (TQG2ERR(IERR)) THEN
WRITE(6,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
WRITE(6,*)'ERROR INITIALIZING (TQINIT) !!!'
WRITE(6,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
STOP
ENDIF
END
我使用以下方法编译子例程:
gfortran -c TQINIT.f
并获得一个 TQINIT.o
然后我使用以下方法编译主程序:
g++ -c test-TQINIT.cpp
并获得一个 test-TQINIT.o。
然后创建我使用的 .x(TQINIT.f 需要库):
g++ test-TQINIT.o TQINIT.o -L/usr/local/thermocalc/3.0/SDK/TQ8 -ltq-linux-x86_64-gfortran44-8 -o test-TQINIT.x
这就是我得到的:
test-TQINIT.o: In function `main':
test-TQINIT.cpp:(.text+0x33): undefined reference to `TQINIT_'
collect2: ld returned 1 exit status
我希望有人能帮助我。提前谢谢你。