当前位置: 首页 > news >正文

FFTW库在vs2022下编译lib库及在QT6.8中调用

目的:

以快速傅里叶变换外部库(缩写FFTW),官网下载的win64位版本没有lib库,本文会通过vs2022来生成lib库,同时在qt6.8中进行调用测试。

1.编译环境

vs版本:VS2022

系统:Win10

Qt版本:qt6.8

2.准备工作

(1)FFTW官网,下载库

网址:https://fftw.org/install/windows.html

3.编译lib库

(1)压缩包里已经有了我们需要的.h和.dll文件,但还是缺少.lib文件。

(2)从.def文件 生成.lib文件

观察到压缩包里有三个.def文件,运用VS自带的工具,可以从.def文件生成.lib文件。

具体方法:

运行VS2022命令行工具(X64 Native Tools Command Prompt for VS 2022),在搜索框中输入X64 Native Tools Command Prompt for VS 2022,单击打开。

(3)用下面的语句完成.lib文件生成。

     lib /def:libfftw3f-3.def

     lib /def:libfftw3-3.def

     lib /def:libfftw3l-3.def

到压缩包,发现多了三个文件,也就是我们需要的.lib文件了。

4.在本项目中配置外部库测试

(1)pro文件

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# 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 += \

    main.cpp \

    mainwindow.cpp

HEADERS += \

    fftw3.h \

    mainwindow.h

FORMS += \

    mainwindow.ui

# Default rules for deployment.

qnx: target.path = /tmp/$${TARGET}/bin

else: unix:!android: target.path = /opt/$${TARGET}/bin

!isEmpty(target.path): INSTALLS += target

# FFTW配置

LIBS+= -L./bin/ -lfftw3-3

(2)mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "fftw3.h"

#include <stdio.h>

#define N 8

MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    int i;

    fftw_complex *din,*out;

    fftw_plan p;

    din  = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);

    out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);

    if((din==NULL)||(out==NULL))

    {

        printf("Error:insufficient available memory\n");

    }

    else

    {

        for(i=0; i<N; i++)/*测试数据*/

        {

            din[i][0] = i+1;

            din[i][1] = 0;

        }

    }

    p = fftw_plan_dft_1d(N, din, out, FFTW_FORWARD,FFTW_ESTIMATE);

    fftw_execute(p);

    fftw_destroy_plan(p);

    fftw_cleanup();

    for(i=0;i<N;i++)

    {

        printf("%f,%fi\n",din[i][0],din[i][1]);

    }

    printf("\n");

    for(i=0;i<N;i++)

    {

        printf("%f,%fi\n",out[i][0],out[i][1]);

    }

    if(din!=NULL) fftw_free(din);

    if(out!=NULL) fftw_free(out);

    getchar();

}

(3)测试结

相关文章:

  • LeetCode hot 100—二叉搜索树中第K小的元素
  • 【VUE2】综合练习——智慧商城
  • visio导出pdf公式变形
  • Embedding原理
  • zk基础—1.一致性原理和算法一
  • 《算法:递归+记忆化搜索》
  • 【计算机视觉】OpenCV实战项目- 抖音动态小表情
  • ESP32移植Openharmony外设篇(11) mfrc522射频读卡器
  • 数据处理与机器学习入门
  • MyBatisPlus不等于如何使用
  • qml 中的anchors
  • dfs复习
  • 内核自旋锁
  • 从0到1:Rust 如何用 FFmpeg 和 OpenGL 打造硬核视频特效
  • 如何使用分块策略生成高覆盖率测试用例:需求文档与接口文档的最佳实践
  • 力扣125.验证回文串
  • 标题:Linux系统文件句柄优化全攻略:彻底解决“Too Many Open Files”错误
  • 【算法竞赛】动态规划+记忆化搜索(作物杂交问题)
  • 31天Python入门——第18天:面向对象三大特性·封装继承多态
  • nacos 2.x使用java语言实现自定义Loadbalance
  • 北京自助建站软件/建设网页
  • 搭建网站的必须条件/企业文化的重要性
  • 做外卖那些网站好/seo推广有哪些
  • dw网站引导页怎么做/搜索引擎优化方法总结
  • 太原住房和城乡建设部网站/郑州网站seo优化公司
  • 网页设计字体代码/杭州seo