zoukankan      html  css  js  c++  java
  • 在Visual Studio中使用FFTW库

    FFTW不用做过多介绍,一般都是在linux下使用,包括放出windows版的作者也自己声明:we don't use Windows ourselves 

    但是由于要和MIC混合编程,想先在本地使用,其中碰到了一些问题,但也明白了不少Visual Studio的基本配置。

    我的系统是windows8和visual studio 2012。

    第一步:下载文件

    去官网下载FFTW64位库:http://www.fftw.org/install/windows.html,直接解压即可。

    第二步:使用VS2012带的lib工具生成lib文件

    在fftw-3.3.4-dll64文件夹下输入以下指令:

    对于VS系列编译器命令如下:

    lib /machine:x64 /def:libfftw3-3.def
    lib /machine:x64 /def:libfftw3f-3.def
    lib /machine:x64 /def:libfftw3l-3.def

    如果不是VS编译器可以不指定machine,直接使用:

     lib /def:libfftw3-3.def
     lib /def:libfftw3f-3.def
     lib /def:libfftw3l-3.def

    Tip:lib指的是lib.exe,如果提示找不到这个指令,说明环境变量没有配,在PATH下添加VS安装路径即可

    比如我的是D:Program Files (x86)Microsoft Visual Studio 11.0VCin;D:Program Files (x86)Microsoft Visual Studio 11.0VCinamd64

    如果前一个仍不能成功生成,可以只用后面一个路径。

    第三步:在VS2012中的项目属性中进行配置

    主要有4个步骤:

    1.添加头文件路径:

    在属性-》c/c++=》AdditionalIncludeDirectories中添加fftw-3.3.4-dll64这个文件夹,这样程序可以使用fftw3.h

    2.添加库路径:

    在属性=》Linker=》AdditionalLibraryDirectories中添加fftw-3.3.4-dll64这个文件夹,这样程序可以使用其中的dll文件。

    3.添加库文件名:

    在属性=》Linker下的input选项中的AdditionalDependencies中添加

    libfftw3-3.lib
    libfftw3f-3.lib
    libfftw3l-3.lib

    这三个lib库,这样程序可以使用其中的lib文件。

    4.将动态库复制到项目的代码目录下(包含vcxproj的目录)

    libfftw3-3.dll

    libfftw3f-3.dll

    libfftw3l-3.dll

    Tip:我自己在复制64位的dll文件之后一直出现:应用程序无法正常启动0xc000007b的问题,后来我其他配置方法不变,从32位的文件夹里拷贝的这三个dll库,程序就可以正常运行。

    第四步:测试代码

    #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
    ");
        }
        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
    ",din[i][0],din[i][1]);
        }
        printf("
    ");
        for(i=0;i<N;i++)
        {
            printf("%f,%fi
    ",out[i][0],out[i][1]);
        }
    
        if(din!=NULL) fftw_free(din);
        if(out!=NULL) fftw_free(out);
        getchar();
        
    
        return 0;
    }
  • 相关阅读:
    easy ui 表单ajax和from两种提交数据方法
    easy ui 下拉级联效果 ,下拉框绑定数据select控件
    easy ui 下拉框绑定数据select控件
    easy ui 异步上传文件,跨域
    easy ui 菜单和按钮(Menu and Button)
    HTTP 错误 404.3
    EXTJS4.2 后台管理菜单栏
    HTML 背景图片自适应
    easy ui 表单元素input控件后面加说明(红色)
    EXTJS 4.2 添加滚动条
  • 原文地址:https://www.cnblogs.com/holyprince/p/5568307.html
Copyright © 2011-2022 走看看