我正在尝试在MPI中编译C ++文件,但它无法正常工作。它说:
main.cpp:(.text+0x35d): undefined reference to `Complex::Complex(double, double)'
main.cpp:(.text+0x384): undefined reference to `Complex::Complex(double, double)'
main.cpp:(.text+0x3a5): undefined reference to `Complex::multiply(Complex*)'
main.cpp:(.text+0x3b7): undefined reference to `Complex::add(Complex*)'
main.cpp:(.text+0x3cf): undefined reference to `Complex::modul()'
/tmp/ccoIbWIN.o: In function `f2(int)':
main.cpp:(.text+0x53d): undefined reference to `Complex::Complex(double, double)'
main.cpp:(.text+0x580): undefined reference to `Complex::Complex(double, double)'
main.cpp:(.text+0x5a1): undefined reference to `Complex::multiply(Complex*)'
main.cpp:(.text+0x5b3): undefined reference to `Complex::add(Complex*)'
main.cpp:(.text+0x5cb): undefined reference to `Complex::modul()'
collect2: ld returned 1 exit status
这是Complex.h:
#include <math.h>
#include <iostream>
using namespace std;
class Complex{
public:
Complex();
Complex(double real,double imag);
~Complex();
double real,imag;
double modul();
void multiply(Complex *t);
void add(Complex *t);
void toString();
};
这是Complex.cpp:
#include "Complex.h"
Complex::Complex(){
this->real = 0;
this->imag = 0;
}
Complex::Complex(double real,double imag){
this->real = real;
this->imag = imag;
}
Complex::~Complex(){}
double Complex::modul(){
double realM = this->real*this->real;
double imagM = this->imag*this->imag;
return realM + imagM;
}
void Complex::multiply(Complex *t){
this->real = this->real*t->real - this->imag*t->imag;
this->imag = this->real*t->imag + this->imag*t->real;
}
void Complex::add(Complex *t){
this->real = this->real + t->real;
this->imag = this->imag + t->imag;
}
这是主要的:
#include <stdio.h>
#include <vector>
#include <stdlib.h>
#include <fstream>
#include "mpi.h"
#include "Complex.h"
using namespace std;
int tip,MAX_STEPS,width,height,iteratie;
double x_min,x_max,y_min,y_max,rezolutie,julia1,julia2;
int thread,*matrice,*buffer;
int nr_linii,add_master;
int i = 0, j = 0;
void f1(int rank){
Complex *z,*c;
for(double y = y_min; y < y_max; y += rezolutie){
for(double x = x_min; x < x_max; x += rezolutie){
z = new Complex(0,0);
c = new Complex(x,y);
iteratie = 0;
while(z->modul() < 4 && iteratie < MAX_STEPS){
z->multiply(z);
z->add(c);
iteratie ++;
}
matrice[i*width + j] = iteratie % 256;
j++;
}
j = 0;
i ++;
if((i == nr_linii && rank != 0) || (i == height && rank == 0))
break;
}
}
void f2(int rank){
Complex *z,*c;
c = new Complex(julia1,julia2);
for(double y = y_min; y < y_max; y += rezolutie){
for(double x = x_min; x < x_max; x += rezolutie){
z = new Complex(x,y);
iteratie = 0;
while(z->modul() < 4 && iteratie < MAX_STEPS){
z->multiply(z);
z->add(c);
iteratie ++;
}
matrice[i*width + j] = iteratie % 256;
j++;
}
j = 0;
if ((i == nr_linii && rank != 0) || (i == height && rank == 0))
break;
}
}
int main(int argc,char *argv[]){
//more code that doesn't depend on f1 or f2
......
// here i want to use the function f1 or f2
if(tip == 0){
f1(rank);
} else {
f2(rank);
}
return 0;
}
为什么它说“未定义对Complex ::”的引用。这是错的? 你能帮助我吗?谢谢。
答案 0 :(得分:4)
您没有收到编译器错误,导致链接器出错。确保链接器(complex.cpp
)可以找到complex.o
输出(通常为ld
)。
您可能只需要确保complex.cpp
是编译器命令行的一部分:
mpic++ main.cpp complex.cpp -o main