我得到了未定义的对“ffwf_malloc”和其他函数fftw 3 lib的引用
起初我把fftw 3库安装到usr/local/lib
上,后来我把它包含<fftw3.h>到我的项目中,但是我遇到了一个错误:Can't find <fftw3.h> file
。在pro文件中,我添加了LIBS += -lfftw 3。现在,在我尝试编译项目之前,我没有任何错误。
我的主文件如下所示:
#include <QCoreApplication>
#include <bitset>
#include <fftw3.h>
#include "fftlib/fft_internal.h"
#include <stdlib.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
cfloat *input = static_cast<cfloat*>(fftwf_malloc(64 * sizeof(cfloat)));
cfloat *output = static_cast<cfloat*>(fftwf_malloc(64 * sizeof(cfloat)));
fftwf_plan plan;
plan = fftwf_plan_dft_1d(64, reinterpret_cast<fftwf_complex *>(input), reinterpret_cast<fftwf_complex *>(output), FFTW_FORWARD, FFTW_MEASURE);
srand(0);
for (unsigned i = 0; i < 64; i++)
{
float real = (float)rand() / RAND_MAX - 0.5f;
float imag = (float)rand() / RAND_MAX - 0.5f;
input[i] = cfloat_create(real, imag);
}
fftwf_execute(plan);
fftwf_free(input);
fftwf_free(output);
fftwf_destroy_plan(plan);
return a.exec();
}
.pro文件:QT -=图形用户界面
CONFIG += c++17 console
CONFIG -= app_bundle
LIBS += -L usr/local/lib/ -lfftw3
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
fftlib/cpu.c \
fftlib/fft.c \
fftlib/kernel.c \
main.cpp
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
HEADERS += \
fftlib/fft.h \
fftlib/fft_internal.h
我尝试将路径usr/local/lib/更改为usr/local/lib/cmake/fftw 3,但仍然不起作用。
1条答案
按热度按时间cigdeys31#
实际上我想用fftw3f库,但是我试着用了fftw3,我不知道有fftw3f库,我不知道为什么,但是fftw3f库的函数在fftw3中有定义,这就是为什么framework没有标记为错误,库的路径没有问题,我安装了fftw3f,它工作正常。