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

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

首先,上网下载了fftw的64位压缩包,地址在下面:
http://www.fftw.org/install/windows.html
解压缩后里面长这样:
11.以VS2017配置fftw 64位为例讲解如何调用第三方库
这次我们要用到的只有下列文件,我们要用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
11.以VS2017配置fftw 64位为例讲解如何调用第三方库
好,有了.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里面
11.以VS2017配置fftw 64位为例讲解如何调用第三方库
接下来以vs2017为例:
新建一个控制台项目
11.以VS2017配置fftw 64位为例讲解如何调用第三方库
在项目—>属性栏下对项目的设置做更改
第一,要更改项目平台,为活动(x64),因为我们调用的库都是64位的
11.以VS2017配置fftw 64位为例讲解如何调用第三方库

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

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

最后,记得一定要把调试时候的环境一并做了修改哦,X64就是X64,否则就会报错
11.以VS2017配置fftw 64位为例讲解如何调用第三方库

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

#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;
}

输出长这样
11.以VS2017配置fftw 64位为例讲解如何调用第三方库

相对路径文章:
https://blog.csdn.net/elloop/article/details/51010151

参考文章:

  1. https://blog.csdn.net/cyh706510441/article/details/46676123
  2. https://www.cnblogs.com/hiddenfox/p/4199392.html
  3. https://blog.csdn.net/woainishifu/article/details/53507723
  4. https://blog.csdn.net/u011954296/article/details/54617048
  5. https://blog.csdn.net/sszgg2006/article/details/25220575
  6. https://blog.csdn.net/u014488388/article/details/52818929
  7. https://www.cnblogs.com/zqh20145320/p/6772985.html
  8. https://www.cnblogs.com/chensu/p/5632486.html