以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
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值