Я ссылаюсь на опубликованный код C ++ из MIT здесь. Я пытаюсь скомпилировать код, используя предоставленный 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?