我一直在从MIT引用发布的C ++代码here.我正在尝试使用提供的Makefile编译代码。注意我正在使用Ubuntu 20.04版并安装了g ++。
从我在此处发布的上一个问题来看,代码似乎在包含的标头之一中的typedef上跳了起来:
#ifndef FFT_H
#define FFT_H
#include<cmath>
#include<complex.h>
#include<vector>
#define Vec(a, b) std::vector<__typeof(*(a))> ((a), (a)+(b))
// allow easy change to float or long double
//#define USE_FLOAT
#define USE_DOUBLE
#ifdef USE_FLOAT
typedef float complex complex_t;
typedef float real_t;
#define cexp cexpf
#define exp expf
#endif
#ifdef USE_DOUBLE
typedef double complex complex_t; // this is the trouble line!
typedef double real_t;
#endif
//#define DEBUG
#endif
编译器抱怨double complex
不是有效的类型,因此不会定义complex_t
现在,最初的假设是应该用或代替,但是,这不能解决问题。无论更改此标头,编译器都会在typedef double complex complex_t;
行上跳闸。
现在,在使用Make时,我也是菜鸟。我正在尝试使用以下Makefile(已提供)编译代码:
CC=g++
RM=rm -f
#CXXFLAGS=-Wall -Wconversion -g
CXXFLAGS=-Wall -Wconversion -O2
LDFLAGS=-g
LDLIBS=-lfftw3 -lfftw3f -lm -lrt
DESTS=experiment generate_graphs kaiserbessel
SRCS:=$(filter-out $(DESTS:%=%.cc), $(wildcard *.cc))
OBJS:=$(subst .cc,.o,$(SRCS))
all: $(DESTS)
我目前的假设是源代码使用的是脏C ++,因此包含complex.h(请注意,其余代码肯定是C ++而不是C)。但是,我也想知道设置g ++时是否做错了什么,并下载了与Makefile对应的编译器版本不同的编译器版本。
关于如何解决此typedef问题的任何想法?
在较新的C ++版本中,complex
是预先存在的固有类型,例如int
和double
。因此,您无需定义它。
似乎您正在使用较新的C ++编译器编译此代码,并尝试从complex
类型存在之前开始编译旧代码。