Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 fftw库,未定义对“fftwf*'”的引用;_C++11_Fftw - Fatal编程技术网

C++11 fftw库,未定义对“fftwf*'”的引用;

C++11 fftw库,未定义对“fftwf*'”的引用;,c++11,fftw,C++11,Fftw,嗯,这是我遇到的一个非常奇怪的错误 当我尝试通过以下命令使用fftw库编译程序时: g++ -std=c++11 -o main main.cpp BFSCcommandlineParser.cpp BFSCframe.cpp BFSCgeometry.cpp ImageIO.cpp -lfftw3 -lm 。。。我明白了: /tmp/cczUuTb0.o: In function `fftw_prog::fftw_prog(char const*)': main.cpp:(.text._ZN

嗯,这是我遇到的一个非常奇怪的错误

当我尝试通过以下命令使用fftw库编译程序时:

g++ -std=c++11 -o main main.cpp BFSCcommandlineParser.cpp BFSCframe.cpp BFSCgeometry.cpp ImageIO.cpp -lfftw3 -lm
。。。我明白了:

/tmp/cczUuTb0.o: In function `fftw_prog::fftw_prog(char const*)':
main.cpp:(.text._ZN9fftw_progC2EPKc[_ZN9fftw_progC5EPKc]+0x5c): undefined reference to `fftwf_import_wisdom_from_file'
/tmp/cczUuTb0.o: In function `fftw_prog::~fftw_prog()':
main.cpp:(.text._ZN9fftw_progD2Ev[_ZN9fftw_progD5Ev]+0x31): undefined reference to `fftwf_export_wisdom_to_file'
/tmp/cczUuTb0.o: In function `fft<2, float, std::complex<float> >::fft(tensor<int, 2ul>, bool)':
main.cpp:(.text._ZN3fftILi2EfSt7complexIfEEC2E6tensorIiLm2EEb[_ZN3fftILi2EfSt7complexIfEEC5E6tensorIiLm2EEb]+0xcf): undefined reference to `fftwf_plan_dft_r2c'
main.cpp:(.text._ZN3fftILi2EfSt7complexIfEEC2E6tensorIiLm2EEb[_ZN3fftILi2EfSt7complexIfEEC5E6tensorIiLm2EEb]+0x111): undefined reference to `fftwf_plan_dft_c2r'
/tmp/cczUuTb0.o: In function `fft<2, float, std::complex<float> >::~fft()':
main.cpp:(.text._ZN3fftILi2EfSt7complexIfEED2Ev[_ZN3fftILi2EfSt7complexIfEED5Ev]+0x25): undefined reference to `fftwf_free'
main.cpp:(.text._ZN3fftILi2EfSt7complexIfEED2Ev[_ZN3fftILi2EfSt7complexIfEED5Ev]+0x35): undefined reference to `fftwf_destroy_plan'
main.cpp:(.text._ZN3fftILi2EfSt7complexIfEED2Ev[_ZN3fftILi2EfSt7complexIfEED5Ev]+0x45): undefined reference to `fftwf_destroy_plan'
/tmp/cczUuTb0.o: In function `fft<2, float, std::complex<float> >::r2F()':
main.cpp:(.text._ZN3fftILi2EfSt7complexIfEE3r2FEv[_ZN3fftILi2EfSt7complexIfEE3r2FEv]+0x25): undefined reference to `fftwf_execute'
/tmp/cczUuTb0.o: In function `fft<2, float, std::complex<float> >::F2r()':
main.cpp:(.text._ZN3fftILi2EfSt7complexIfEE3F2rEv[_ZN3fftILi2EfSt7complexIfEE3F2rEv]+0x35): undefined reference to `fftwf_execute'
collect2: error: ld returned 1 exit status
/tmp/cczUuTb0.o:在函数“fftw_prog::fftw_prog(char const*)”中:
main.cpp:(.text._ZN9fftw_progC2EPKc[_ZN9fftw_progC5EPKc]+0x5c):未定义对“fftwf_导入_智慧_from_文件”的引用
/tmp/cczUuTb0.o:在函数“fftw_prog::~fftw_prog()”中:
main.cpp:(.text._ZN9fftw_progD2Ev[_ZN9fftw_progD5Ev]+0x31):未定义对“fftwf_导出到_文件”的引用
/tmp/cczUuTb0.o:在函数“fft::fft(张量,bool)”中:
main.cpp:(.text."zn3fftili2efst7complexifeec2etensoriilm2eeb["zn3fftili2efst7complexifeec5etensoriilm2eeb]+0xcf):未定义对“fftwf\u平面图\u dft\u r2c”的引用
main.cpp:(.text._zn3fftili2efst7complexifeec2etensoriilm2eeb[_zn3fftili2efst7complexifeec5etensoriilm2eeb]+0x111):未定义对“fftwf\u平面图\u dft\u c2r”的引用
/tmp/cczUuTb0.o:在函数“fft::~fft()”中:
main.cpp:(.text._zn3fftili2efst7complexiefeed2ev[_zn3fftili2efst7complexiefeed5ev]+0x25):未定义对“fftwf_free”的引用
main.cpp:(.text._zn3fftili2efst7complexiefeed2ev[_zn3fftili2efst7complexiefeed5ev]+0x35):未定义对“fftwf销毁计划”的引用
main.cpp:(.text._zn3fftili2efst7complexiefeed2ev[_zn3fftili2efst7complexiefeed5ev]+0x45):未定义对“fftwf销毁计划”的引用
/tmp/cczUuTb0.o:在函数'fft::r2F()'中:
main.cpp:(.text.\u ZN3fftILi2EfSt7complexIfEE3r2FEv[\u ZN3fftILi2EfSt7complexIfEE3r2FEv]+0x25):对“fftwf\u execute”的未定义引用
/tmp/cczUuTb0.o:在函数'fft::F2r()'中:
main.cpp:(.text._ZN3fftILi2EfSt7complexIfEE3F2rEv[_ZN3fftILi2EfSt7complexIfEE3F2rEv]+0x35):对“fftwf\u execute”的未定义引用
collect2:错误:ld返回了1个退出状态
我认为这可能是fftw本身的问题,所以我用一个proram测试了这个库,它成功了。这意味着情况并非如此。 下面的代码是来自我的文件的模板,它是我的项目中唯一使用fftw的模板

template <int N, typename rT, typename FT>
        inline fft<N,rT,FT>::~fft() {
        if (data != 0) {
            if (Precision<rT>::IsFloat) {
                fftwf_free((fftwf_complex *)data);
                fftwf_destroy_plan((fftwf_plan_s*) r2Fplan);
                fftwf_destroy_plan((fftwf_plan_s*) F2rplan);
            }
            else {
                fftw_free((fftw_complex *)data);
                fftw_destroy_plan((fftw_plan_s*) r2Fplan);
                fftw_destroy_plan((fftw_plan_s*) F2rplan);
            }
        }
    }
模板
内联fft::~fft(){
如果(数据!=0){
if(精度::IsFloat){
无fftwf_((fftwf_复合体*)数据);
fftwf_销毁计划((fftwf_计划*)r2Fplan);
fftwf_销毁计划((fftwf_计划*)F2rplan);
}
否则{
无fftw_((fftw_复合体*)数据);
fftw_销毁计划((fftw_计划*)r2Fplan);
fftw_销毁计划((fftw_计划*)F2rplan);
}
}
}

对于单精度(
float
)您需要链接
libfftwf
库,对于双精度(
double
)您需要
libfftw
库。我猜你只是在联系后者,而不是前者。对于gcc等,如果您想要双精度和单精度支持,命令行需要包含
-lfftw3-lfftw3f

感谢您的回答,我尝试以不同的方式链接fftw库-lfftw3l-lfftw3f和当前的-lfftw3,打印相同的错误。这仍然是错误的,如果你想要双精度和单精度,它必须是
-lfftw3-lfftw3f
。好的-这可能是从上面的代码中看不到的简单方法-我想你只需要使用分而治之的方法,直到你发现问题。谢谢,我正在这样做。只需要很长时间来测试整个文件(~1000行),现在就可以了!,我需要添加所有参数,-lfftw3,-lfftw3f,-lfftw3l。我真傻!