以VS2017配置fftw 64位为例讲解如何调用第三方库

最近在使用github上很多项目,然后就会需要配很多依赖包,很多第三方库需要加载进来,以前也经常配一些环境,但是都是看着网上的大佬们的教程一步一步走下来的,只知其然而不知其所以然,这次就配置就遇见了很多问题,很多教程不详细,或者过老,实在太坑,所以这次就好好学习了一下背后的知识,为以后配置第三方库打好基础。也分享给大家,希望大家少踩坑。

首先,上网下载了fftw的64位压缩包,地址在下面:
FFTW Installation on Windows
解压缩后里面长这样:


这次我们要用到的只有下列文件,我们要用def文件生成lib文件

libfftw3-3.def libfftw3f-3.def libfftw3l-3.def
libfftw3-3.dll libfftw3f-3.dll libfftw3l-3.dll
fftw3.h

关于.dll .lib文件的基本知识看我这篇文章《9.浅谈.dll .lib .def文件格式究竟是什么》

如何用def文件生成lib库文件,看我这篇文章《10. 利用vs2017中的lib.exe把def文件生成lib文件》

这样子就可以把
libfftw3-3.def libfftw3f-3.def libfftw3l-3.def
三个文件生成为
libfftw3-3.lib libfftw3f-3.lib libfftw3l-3.lib


好,有了.lib和.dll和头文件,我们就有了所有跑程序需要的东西了,接下来就是配置好环境即可。
为了比较清晰明了,而且也为了后面的路径好填,我们在其他地方新建一个文件夹,我是新建在桌面啦,其实无所谓,然后在里面创建bin, lib, include三个子文件夹,分别存放dll文件,lib文件,和头文件,只需要将
libfftw3-3.def libfftw3f-3.def libfftw3l-3.def放进bin里面,
libfftw3-3.lib libfftw3f-3.lib libfftw3l-3.lib放在lib文件夹里面,
fftw3.h放进include里面


接下来以vs2017为例:
新建一个控制台项目


在项目—>属性栏下对项目的设置做更改
第一,要更改项目平台,为活动(x64),因为我们调用的库都是64位的

 

  1. 头文件路径:VC++目录下的包含目录,把刚才创建的include文件夹路径,我这里是
    C:\Users\MJW\Desktop\fftw\source\FFT\include加入进去
  2. lib文件路径:VC++目录下的库目录,把lib文件夹的路径放这里:
  3. dll文件路径:
    这一条比较重要,因为现在所有第三方库都不用安装了,所以在运行程序的时候如何找到这些dll是一个问题。
    exe在运行的时候找dll的顺序如下,理论上把dll加到任何一个环节都可以:
    应用程序所在目录;
    系统目录。GetSystemDirectory返回的目录,通常是系统盘\Windows\System32;
    16位系统目录。该项只是为了向前兼容的处理,可以不考虑;
    Windows目录。GetWindowsDirectory返回的目录,通常是系统盘\Windows;
    当前目录。GetCurrentDirectory返回的目录;
    环境变量PATH中所有目录。
    我们之前做了这么多事情,就是为了在新的环境中不需要做任何配置就能运行VS的工程,所以任何手动拷文件/修改环境变量的方式都不是最好的。
    最后采取的方法是将bin的路径加到环境变量PATH中,我不太想加入到系统环境变量中,因为需要重启。所以我加到VS的配置中,修改VS的环境变量即可。(这里使用相对路径是最好的,但是我在这里为了方便使用的绝对路径,请注意,后面我会进行改进)

    注意!!!这里不要选继承!!!否则会报错找不到dll文件
  4. 添加附加依赖项
    上面只是把所有的需要用到的文件路径包含进来了,并没有指明要用到哪些lib文件,所以还需要在这里指明具体的文件名:
    libfftw3-3.lib;libfftw3f-3.lib;libfftw3l-3.lib;
    把它们输入进去

 

好的,我们设置就结束了,记得点击应用哦

最后,记得一定要把调试时候的环境一并做了修改哦,X64就是X64,否则就会报错

最后,用一段测试程序测试一下吧 :)微笑脸

#include "stdafx.h"
#include "fftw3.h"
#include <stdio.h>
#define N 8
int main()
{
    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); /* repeat as needed */
    fftw_destroy_plan(p);
    fftw_cleanup();
    for (i = 0; i<N; i++)/*OUTPUT*/
    {
        printf("%f,%fi\n", din[i][0], din[i][1]);
    }
    printf("\n");
    for (i = 0; i<N; i++)/*OUTPUT*/
    {
        printf("%f,%fi\n", out[i][0], out[i][1]);
    }

    if (din != NULL) fftw_free(din);
    if (out != NULL) fftw_free(out);
    getchar();
    return 0;
}


 

输出长这样

 

相对路径文章:
Visual Studio中的环境变量(以Visual Studio 2013为例)_elloop的博客-CSDN博客_vs 环境变量

参考文章:

  1. https://blog.csdn.net/cyh706510441/article/details/46676123
  2. [C++] 在Visual Studio工程中管理C++第三方库 - 南京大乱炖 - 博客园
  3. 以OpenCV库为例讲解如何在VS中配置第三方动态库_邓无邪的博客-CSDN博客
  4. vs中使用第三方库的方法_二叉树的博客-CSDN博客_vs dll 工程无法引入第三方库
  5. vs使用(引用)第三方库的四种方法_DayThinking的博客-CSDN博客_vs如何引用org.bouncycastle.security
  6. 动态库和静态库以及OpenCV库配置解释_丐帮二帮主的博客-CSDN博客_opencv 导入动态模型 静态模型
  7. 关于VS2013下制作和使用静态库和动态库 - 20145320周岐浩 - 博客园
  8. https://www.cnblogs.com/chensu/p/5632486.html
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Qt是一个跨平台的应用程序开发框架,而FFTW(快速傅立叶变换窗)库是一个用于计算傅里叶变换的库。在Qt中调用FFTW库对调制信号进行傅里叶变换,可以通过以下步骤实现。 首先,需要安装和配置好Qt和FFTW库。可以在Qt的官方网站上下载和安装Qt,而FFTW库可以在其官方网站上下载。安装完成后,将FFTW库的头文件和库文件复制到Qt项目的文件目录中,并在Qt项目的.pro文件中添加相应的库文件引用。 接下来,在Qt项目中创建一个按键或其他方式进行触发的信号处理函数。在该函数中,先将需要进行傅里叶变换的调制信号加载到内存中,可以使用Qt提供的文件操作类或自定义的数据结构来实现。 然后,通过调用FFTW库的接口函数,将加载到内存中的调制信号进行傅里叶变换。可以根据需要选择合适的傅里叶变换类型和参数设置。 最后,将傅里叶变换的结果输出或展示出来。可以通过将结果保存到文件中、在界面上显示出来或其他方式进行展示。 需要注意的是,调用FFTW库进行傅里叶变换需要一定的数学和信号处理基础知识,并且需要根据具体的应用场景和需求进行适当的参数设置和结果解释。 总结起来,通过Qt调用FFTW库对调制信号进行傅里叶变换的过程包括:安装和配置库、加载调制信号、调用库函数进行傅里叶变换,最后将结果输出或展示出来。通过这种方式,可以实现对调制信号的频域分析和进一步的信号处理。 ### 回答2: QT是一种跨平台的图形用户界面开发框架,而FFTW(Fastest Fourier Transform in the West)是一个高效的傅里叶变换库。通过使用QT来调用FFTW库,可以对调制信号进行傅里叶变换。 首先,在QT中引入FFTW库,可以使用相关的头文件来获得FFT函数的声明和定义。接下来,在QT的代码中创建一个调制信号的数组,该数组包含了需要进行傅里叶变换的数据。然后,创建一个FFTW计划,用于存储傅里叶变换的配置信息。可以通过调用FFTW的函数来创建该计划,并指定输入和输出数组的尺寸和数据类型。 接着,可以调用FFTW的函数来执行傅里叶变换。将输入数组和计划作为参数传递给该函数,傅里叶变换的结果将会存储在输出数组中。在计划被执行后,可以使用输出数组来获取傅里叶变换的结果。 最后,可以使用QT的图形界面来展示傅里叶变换的结果。通过将输出数组中的数据转换为图形显示的形式,可以直观地观察到调制信号的频谱特征。可以在QT中使用相应的控件和绘图工具来创建一个能够实时显示傅里叶变换结果的界面。 总的来说,通过将QT与FFTW库结合使用,可以很方便地对调制信号进行傅里叶变换,并通过QT的图形界面展示傅里叶变换的结果,从而更好地理解和分析调制信号的频谱信息。 ### 回答3: Qt框架是一个功能强大的跨平台应用程序开发工具,而fftw库(Fastest Fourier Transform in the West)是一个用于高效执行傅里叶变换的库。在Qt中调用fftw库对调制信号进行傅里叶变换可以按照以下步骤进行: 首先,需要在Qt项目中包含fftw库的头文件和链接fftw库。可以通过在.pro文件中添加对应的库路径和库文件来实现: ``` LIBS += -lfftw3 ``` 然后,在代码中定义并初始化输入和输出数组。输入数组包含要进行傅里叶变换的调制信号数据,而输出数组用于存储变换后的结果。 ``` fftw_complex *input, *output; fftw_plan plan; int length = 1024; // 调制信号的长度 input = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * length); output = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * length); plan = fftw_plan_dft_1d(length, input, output, FFTW_FORWARD, FFTW_ESTIMATE); ``` 接下来,为输入数组赋值,这可以通过采样调制信号或者从文件中读取调制信号数据来实现。 ``` for(int i=0; i<length; i++){ // 为input赋值 } ``` 然后,调用fftw库的傅里叶变换函数进行实际计算。 ``` fftw_execute(plan); ``` 最后,针对输出数组的结果进行后续处理或展示。 ``` for(int i=0; i<length; i++){ // 处理output中的结果 } ``` 需要注意的是,使用fftw库进行傅里叶变换时,输入和输出数组的大小必须相等,并且需要使用fftw_malloc函数来进行内存分配和释放,并且要在使用完成后调用fftw_destroy_plan函数销毁傅里叶变换计划。 总之,通过以上步骤,在Qt中调用fftw库对调制信号进行傅里叶变换是可行的,并且可以根据需要对变换结果进行进一步处理和展示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值