win7-64位系统下,VC++2010中设置FFTW时遇到的若干问题及解决办法

本文分享在VS2010上运行C++程序配置FFTW库遇到的问题及解决办法。如出现“LNK2019无法识别的外部符号”是因未配置FFTW库,给出下载、解压、生成lib文件等配置步骤;还提及解决“Cannot find or open the PDB file”等问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转自(复制,黏贴)“老橘皮的马甲的博客”,作者写的很简单清楚,但很有用。注意64位的系统也可能需药32位的FFTW.
博士学长发给我一个C++源文件及头文件fftw3.h,让我在代码上修改。奈何我只学过一些C,更没有用过VS2010。于是我打算先在VS2010上把现成的这个C++程序给运行起来。新建项目、添加源文件和头文件的现有项atompot.cpp、fftw3.h、编译、运行。编译成功,但是运行后马上报错,LNK2019无法识别的外部符号!!!
通过无数次的百度,我了解到,出现“LNK2019无法识别的外部符号”这样的报错,主要是因为我在程序中引用了fftw3.h的头文件,但是没有配置对应的FFTW库。

下面,我就把自己在运行C++程序过程中(主要是配置FFTW库的问题)遇到的各种问题及解决办法一一列出。​

一、出错:LNK2019无法识别的外部符号

如上提到的那样,在我的情况下,出现“LNK2019无法识别的外部符号”这样的报错,主要是因为我在程序中引用了fftw3.h的头文件,但是没有配置对应的FFTW库,下面是我借鉴网上搜到的方法亲身试验成功的一种方法:

1、登陆http://www.fftw.org/install/windows.html,下载 32-bit version: fftw-3.3.4-dll32.zip (2.4MB)​。

注意:我是win7-64位的,还是要下32-bit version!!!不要问我为什么,我之前自以为是下了64-bit,结果程序运行还是出错,走投无路下了32-bit,倒是好了。血的教训!
2、把fftw-3.3.4-dll32.zip解压到某一文件夹,例如D:\fftw

3、打开VS命令提示(开始->Microsoft Visual studio 2010->Visual studio Tools->Visual Studio 命令提示(2010)),然后把文件路径定位到D:\fftw。

4、​输入命令:

lib /def:libfftw3-3.def

lib /def:libfftw3f-3.def

lib /def:libfftw3l-3.def

结果,D:\fftw中会生成对应的lib文件:

libfftw3-3.lib

libfftw3f-3.lib

libfftw3l-3.lib

5、在VS2010中,

项目->属性->C/C++->附加包含目录​,加上D:\fftw

​项目->属性->​链接器->常规->附加库目录,加上D:\fftw

项目->属性->链接器->输入->附加​​依赖项,加上libfftw3-3.lib、libfftw3f-3.lib、libfftw3l-3.lib

6、把​D:\fftw中的libfftw3-3.dll、libfftw3f-3.dll、libfftw3l-3.dll

三个dll文件​复制到我的项目文件夹里(有.vcxproj文件的那个文件夹)。

注意:这一步至关重要,我之前用测试程序尝试了一下成功了,但是换到现有的程序时,因为忘记复制dll文件,导致运行又出错了。​

7、附上fftw测试程序(网上搜的)

include “fftw3.h”

int main()
{

     fftw_complex *in, *out;

     fftw_plan p;

     int N= 8;

     int i;

     int j;

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

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

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

     {

         in[i][0] = 1.0;

         in[i][1] = 0.0;

         printf("%6.2f ",in[i][0]);

     }

     printf("\n");

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

     fftw_execute(p);

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

     {

         printf("%6.2f ",out[j][0]);

     }

     printf("\n");

     fftw_destroy_plan(p);

     fftw_free(in);

       fftw_free(out);

     return 0;

 } 

二、出错:Cannot find or open the PDB file

在网上找到了方法,一次就搞定了:​

1、在VS2010中,工具->选项->调试->符号,选择Microsoft符号服务器,选择一个缓存路径,然后确认。

2、编译运行任何一个小程序(可能会有点慢)。

3、在VS2010中,工具->选项->调试->符号,去掉Microsoft符号服务器​,确认。

三、运行时,控制台一闪而逝,输出窗口显示“ *.exe 本机已退出,返回值0”

原谅我如此小白的问题,但我是真的不懂,网上查了才知道,原来我把“运行”点成了“编译”,用Ctrl+F5或是调试->开始执行,问题解决!​

四、应用程序无法正常启动(0xc000007b) ​

网上和我有类似情况的,说得很好。主要是libfftw3-3.dll、libfftw3f-3.dll、libfftw3l-3.dll三个dll文件,首先得是32位的,然后得把它们复制到你的项目文件夹下(有.vcxproj文件的那个文件夹)。

从最初什么都不懂又做不出来的绝望,到现在还是什么都不懂但是已经把程序运行出来的轻松,最想感谢百度,感谢论坛、博客,以及知道上的各路精英,而且强烈觉得一定要把自己这段艰难的过程记录下来,当然,更主要是把自己的经验分享出来,吼吼!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值