CImg和fftw ++的组合失败

时间:2016-04-07 08:33:21

标签: c++ fftw cimg

我想在我的c ++项目中做一个fft,然后将其显示为图像。为了做fft,我使用fftw ++,并且为了显示图像,我想使用CImg库。因此,我开始使用here的演示项目。编译时,一切正常。一旦我添加CImg标头,它就会失败并显示错误

test.cpp: In function ‘int main()’:
test.cpp:18:12: error: ‘f’ was not declared in this scope
   Complex *f=ComplexAlign(n);

我的文件看起来像

#include "fftw++.h"
#include "CImg.h"
// Compile with:
// g++ -I .. -fopenmp example0.cc ../fftw++.cc -lfftw3 -lfftw3_omp

//using namespace std;
//using namespace utils;
//using namespace fftwpp;
//using namespace cimg_library;
int main()
{
  fftwpp::fftw::maxthreads=get_max_threads();

  std::cout << "1D complex to complex in-place FFT, not using the Array class"
       << std::endl;

  unsigned int n=4;
  Complex *f=utils::ComplexAlign(n);

  fftwpp::fft1d Forward(n,-1);
  fftwpp::fft1d Backward(n,1);

  for(unsigned int i=0; i < n; i++) f[i]=i;

  std::cout << "\ninput:" << std::endl;
  for(unsigned int i=0; i < n; i++) std::cout << f[i] << std::endl;

  Forward.fft(f);

  std::cout << "\noutput:" << std::endl;
  for(unsigned int i=0; i < n; i++) std::cout << f[i] << std::endl;

  Backward.fftNormalized(f);

  std::cout << "\ntransformed back:" << std::endl;
  for(unsigned int i=0; i < n; i++) std::cout << f[i] << std::endl;

  utils::deleteAlign(f);
}

并使用

编译
g++ -I .. -fopenmp test.cpp ../fftw++.cc -lfftw3 -lfftw3_omp

我的g ++版本是4.8.5。添加Complex.h - 标头也无济于事。我可以做些什么来组合两个库?

编辑:进一步的研究表明,使用C库complex.hCImg.h会导致很多编译问题,将Complex.h的库fftw++与...结合起来结果也有错误,只有来自C ++的complex - include可以与CImg.h - include文件一起使用。原因:到目前为止还不知道。

1 个答案:

答案 0 :(得分:1)

我的解决方案(即使它并不完美)是,我创建了第二个cpp文件:
second.cpp:

#include "CImg.h"
//Code for images
void example(void){
}

和包含文件:
second.h:

#ifndef SECOND_H
#define SECOND_H

void example(void);


#endif /* SECOND_H */

如果我只包含该包含文件而非CImg.h,我可以同时使用fftw++CImg