unresolved external symbol __beginthreadex错误的解决——谈谈在Win32 Consle Application如何使用MFC类

本文介绍如何在Win32控制台应用程序中使用MFC类库时避免出现未解析外部符号错误,通过调整项目的配置设置,实现顺利编译并运行带有MFC功能的程序。

作者:朱金灿

来源:http://blog.youkuaiyun.com/clever101


Win32 Consle Application使用MFC的一些类如CString时编译时相信会很经常遇到一些连接错误:
1.       unresolved external symbol __beginthreadex
2.       unresolved external symbol __endthreadex
但是不用MFC类又让人不甘心,放着好好的类库不用实在太可惜了。其实是可以用的,只是我们的设置有问题。
下面我将具体设置描述一下,和大家共同分享我的经验。
一.新建一个Win32 Consle Application工程:GetCurrentTime。
二.打开“Project”菜单——〉“Setting”菜单项——〉General选项卡
在Microsoft Fountion Classes:中选择:Use MFC in Static Library.
 

三.再在C/C++选项卡中的在Category中选择Code Generation,
再在Use run-time library中选择Debug Multithreaded或者multithreaded
其中,
Single-Threaded
单线程静态链接库(release版本)
Multithreaded
多线程静态链接库(release版本)
multithreaded DLL
多线程动态链接库(release版本)
Debug Single-Threaded
单线程静态链接库(debug版本)
Debug Multithreaded
多线程静态链接库(debug版本)
Debug Multithreaded DLL
多线程动态链接库(debug版本)

选择Debug Multithreaded(如果你在Win32 Debug环境下)

之后敲入你的代码:

#include "stdafx.h"

#include <afx.h>  // 注意要加上你所用的类的头文件

#include <stdio.h>

 

int main(int argc, char* argv[])

{

       CTime time;

       time = CTime::GetCurrentTime();

       CString str = time.Format("%H:%M:%S");

    printf("当前时间为%s/n",(LPCTSTR)str);

       return 0;

}

 

在编译时往往提示设置有改动,是否继续,选择“是”

四.大功告成。

运行结果:

 

 

 

<think>好的,用户遇到了在VS2005中链接FFTW库时出现的LNK2019错误,具体是未解析的外部符号__imp__fftw_execute。我需要根据提供的引用信息和自己的知识来解答这个问题。 首先,LNK2019错误通常是由于链接器找不到函数定义导致的。根据引用[1],这可能是由于缺少库文件或库未正确链接。引用[3]提到在VS2008中使用FFTW时出现错误,可能涉及库的链接问题。 接下来,我需要考虑FFTW库的正确安装和配置步骤。用户使用的是VS2005,可能需要检查是否下载了正确版本的FFTW库,特别是预编译的Windows版本是否与编译器兼容。32位和64位的库文件不兼容,所以需要确认项目配置的平台是否匹配。 然后,检查项目属性中的附加包含目录和附加库目录是否正确指向FFTW的include和lib文件夹。链接器输入中的附加依赖项是否添加了libfftw3-3.lib或其他对应的库文件。另外,用户可能需要在代码中使用extern "C"来避免C++的名称修饰问题,因为FFTW是用C编写的。 还需要确认是否在预处理器定义中添加了正确的内容,比如FFTW_USE_DLL,特别是当使用DLL版本的库时。此外,运行时库的版本是否一致,比如MDd与MTd,可能导致冲突。 还有,检查库文件是否实际存在,路径是否正确,没有拼写错误。如果使用的是动态库,确保对应的DLL文件在可执行文件的路径中。如果问题依旧存在,可能需要重新编译FFTW库,确保与VS2005兼容。 最后,参考引用中的例子,可能需要综合这些步骤,逐步排查,确保所有配置正确无误。</think>### VS2005 LNK2019: __imp__fftw_execute 链接错误解决方案 在VS2005中使用FFTW库时出现`LNK2019: unresolved external symbol __imp__fftw_execute`错误,主要原因是链接器无法找到FFTW库的函数实现。以下是具体解决步骤: --- #### 1. 验证库文件配置 **关键问题**:FFTW的静态库(`.lib`)未正确链接到项目。 - **检查库文件型**: - 确认下载的FFTW库是Windows预编译版本(如`fftw-3.3.5-dll32.zip`或`fftw-3.3.5-dll64.zip`)[^1] - 32位项目必须使用`libfftw3-3.lib`(32位库),64位项目使用`libfftw3-3-64.lib` - **配置项目属性**: ```text 项目属性 → 链接器 → 输入 → 附加依赖项 添加:libfftw3-3.lib ``` - **设置库路径**: ```text 项目属性 → 链接器 → 常规 → 附加库目录 添加FFTW库文件路径(如C:\fftw\lib) ``` --- #### 2. 检查动态库依赖 **关键问题**:动态库(DLL)未正确部署。 - 将`libfftw3-3.dll`复制到以下位置: - 项目生成目录(如`Debug`或`Release`文件夹) - 系统目录(如`C:\Windows\System32`,仅限32位系统) - 若使用64位库,需将DLL放入`SysWOW64`目录 --- #### 3. 头文件包含验证 **关键问题**:编译器找不到FFTW头文件。 - 在代码中包含FFTW头文件: ```c #include "fftw3.h" ``` - 配置头文件路径: ```text 项目属性 → C/C++ → 常规 → 附加包含目录 添加FFTW头文件路径(如C:\fftw\include) ``` --- #### 4. 编译器兼容性检查 **关键问题**:库文件与编译器不兼容。 - 使用VS2005编译的FFTW库必须与以下配置匹配: - **运行时库型**:`Multi-threaded Debug DLL (/MDd)`或`Multi-threaded DLL (/MD)` - **平台工具集**:选择`Visual Studio 2005 (v80)` --- #### 5. 代码规范修正 **关键问题**:C/C++混合编程导致符号修饰错误。 - 在包含头文件时添加`extern "C"`声明: ```cpp extern "C" { #include "fftw3.h" } ``` --- #### 6. 重新编译FFTW(可选) 若预编译库不兼容,需手动编译: 1. 下载FFTW源码([fftw.org](http://www.fftw.org)) 2. 使用VS2005命令行工具执行: ```bash configure --with-our-malloc --enable-shared --disable-static nmake ``` --- ### 典型错误排查表 | 现象 | 原因 | 解决方案 | |------|------|----------| | 编译通过,链接失败 | 库文件未正确链接 | 检查附加依赖项和库路径 | | 运行时提示缺少DLL | 动态库未部署 | 复制DLL到输出目录 | | 仅Release模式报错 | Debug/Release库混用 | 区分`libfftw3-3.lib`和`libfftw3-3d.lib` | ---
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clever101

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值