error link 2001 连接时出错

本文介绍了如何解决在使用VC开发C++时遇到的unresolvedexternalsymbol_WinMain@16错误。主要原因是入口函数使用不当或编译配置不正确。通过调整编译设置和修改入口函数可以有效解决此问题。

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

unresolved external symbol _WinMain@16的解决方法

当我们在使用VC开发C++的时候会遇到一些连接错误,这些错误比编译错误要难改正,笔者今天就遇到这样一个错误

1.问题描叙:

error LNK2001: unresolved external symbol _WinMain@16
debug/main.exe:fatal error LNK 1120:1 unresolved externals
error executing link.exe;
2.产生该错误的原因

a.你建立了一个WINDOWS应用程序,可是你却在入口函数的时候使用main而不是WinMain;

 


b.你用vc打开了一个.c/.cpp 文件,然后直接编译这个文件,这个文件中使用了WinMian而不是main作为入口函数。vc这时的默认设置是针对控制台程序的。


3.解决方案

a.改正入口函数;

b.进入project->setting->c/c++, 在category中选择preprocessor,在processor definitions中删除_CONSOLE, 添加_WINDOWS;

c.2.进入project->setting->Link, 在Project options中将 /subsystem:console改为/subsystem:windows.

VS2005中的设置

1.菜单中选择 Project->Properties, 弹出Property Pages窗口

2.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中删除_CONSOLE, 添加_WINDOWS.

3.在左边栏中依次选择:Configuration Properties->Linker->System,然后在右边栏的SubSystem对应的项改为Windows(/SUBSYSTEM:WINDOWS)

4.Rebuild All. Ok ?

测试:(环境:vs2005,编程语言vc)

1.用文本编辑器编写如下代码:

// test.c
#i nclude <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
MessageBox(NULL, "Hello!", "title", MB_OK);
}

假设把文件包存为test.c.

2.用vs2005建一个Win32 Console Application, 注意在Application Settings设置为Empty project. 然后把test.c添加到工程中去。

3.vs2005建立的工程默认是支持UNICODE的,我不用这个,所以在菜单中选择 Project->Properties, 弹出Property Pages窗口。在左边栏中依次选择:Configuration Properties->General,然后把右边栏的Character Set 改为Use Multi-Byte Character Set.

4.编译,出现如下错误:
MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
C:/test/Debug/test.exe : fatal error LNK1120: 1 unresolved externals

5.按照上述VS2005中的设置方法进行设置,然后再编译,错误消失了吧!


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/douyameimei/archive/2009/08/14/4447626.aspx

<think>我们正在处理ST-LINK连接错误的问题。根据引用[1],我们知道ST-LINK有一个序列号,并且可以通过指定序列号来连接。另外,引用[3]提到了网络连接问题可能导致通信失败,虽然它是关于MySQL的,但我们可以借鉴其思路:检查网络连接和配置。引用[4]提到了连接错误的troubleshooting方法,但具体内容未给出。因此,我们主要参考引用[1]和引用[3]的思路。 常见的ST-LINK连接错误可能包括: 1. 硬件连接问题(USB线、接口松动等) 2. 驱动程序问题 3. ST-LINK固件版本过旧 4. 目标板供电问题 5. 软件配置问题(如选择了错误的ST-LINK,或者指定了错误的序列号) 步骤: 1. 检查硬件连接:确保USB线连接牢固,尝试更换USB线或USB端口。 2. 检查设备管理器:在Windows系统中,打开设备管理器,查看ST-LINK是否被正确识别(通常显示为“STMicroelectronics STLink Virtual COM Port”和“STMicroelectronics STLink USB device”)。如果有黄色感叹号,则需要重新安装驱动。 3. 更新ST-LINK驱动:可以从ST官网下载最新的ST-LINK驱动。 4. 更新ST-LINK固件:使用ST-LINK Utility软件可以更新固件(注意:更新固件有风险,需谨慎操作)。 5. 检查目标板供电:确保目标板有足够的电源供应,有目标板供电不足会导致连接不稳定。 6. 检查软件配置:在开发环境(如Keil、IAR或STM32CubeIDE)中,检查是否选择了正确的ST-LINK,并且指定了正确的序列号(如果有多个ST-LINK)。引用[1]中提到可以通过`-i`参数指定ST-LINK的序列号。 如果上述步骤不能解决问题,可以尝试以下: 7. 重启电脑和开发板。 8. 尝试使用另一台电脑连接,以确定是否是电脑的问题。 9. 检查ST-LINK与目标板的连接线(SWD或JTAG)是否正常,特别是SWDIO和SWCLK两根线。 引用[2]提到了LPC-Link,这是一种类似的调试器,但这里我们主要关注ST-LINK。 根据引用[3]中解决MySQL连接问题的思路,我们可以联想到网络设置(虽然ST-LINK是USB设备,但如果是网络调试器则另当别论,但通常ST-LINK是USB直接连接的)。所以对于ST-LINK,我们不需要考虑网络设置,除非是远程调试。 因此,我们总结如下: 解决ST-LINK连接错误的步骤: 1. **检查物理连接**:重新插拔USB线,确保连接可靠。 2. **检查设备管理器**:确认设备被正确识别,无黄色感叹号。 3. **安装或更新驱动**:从ST官网下载并安装最新的ST-LINK驱动。 4. **更新固件**:使用ST-LINK Utility更新固件(注意:更新固件可能导致不兼容,需确认当前固件版本是否需要更新)。 5. **检查目标板供电**:确保目标板有电,如果目标板由ST-LINK供电,检查是否在软件中设置了供电(通常ST-LINK可以配置是否给目标板供电)。 6. **检查软件配置**:在IDE中检查调试配置,选择正确的ST-LINK,如果有多个,指定序列号(引用[1])。 7. **更换电脑或USB端口**:排除电脑USB端口或系统问题。 8. **检查SWD/JTAG连接线**:确保SWDIO和SWCLK(以及GND)连接正确且没有虚焊。 如果以上步骤仍无法解决,可能是ST-LINK硬件故障。 相关问题: 1. 如何更新ST-LINK的固件? 2. 如何在Keil MDK中指定ST-LINK的序列号? 3. ST-LINK驱动安装失败怎么办? 4. ST-LINK无法识别目标板的原因有哪些?</think>### ST-LINK 连接错误排查指南 以下是系统性的故障排查步骤,结合硬件连接、驱动配置和软件设置: #### 1. **基础硬件检查** - ✅ **重新插拔设备**:断开ST-LINK与电脑和目标板的连接,等待10秒后重新连接。 - ✅ **检查线缆**:更换USB线缆(尤其是移动后出现故障)。 - ✅ **供电验证**: - 若目标板独立供电,确保电压在3.3V±10%范围内。 - 若由ST-LINK供电,检查`nRST`引脚是否正常(目标板电流需<100mA)[^1]。 #### 2. **驱动与系统配置** ```bash # Windows设备管理器关键检查项 [通用串行总线控制器] → [STMicroelectronics STLink Virtual COM Port] [通用串行总线设备] → [STMicroelectronics USB Device] ``` - 🔧 **驱动修复方案**: 1. 卸载现有驱动(右键→卸载设备) 2. 安装最新[ST-LINK驱动](https://www.st.com/en/development-tools/stsw-link009.html) 3. 禁用USB节能模式: - 设备管理器→USB根集线器→电源管理→取消"允许计算机关闭此设备" #### 3. **固件与软件配置** - ⚙️ **固件更新**: 1. 运行 **ST-LINK Utility** 2. 菜单栏 `ST-LINK` → `Firmware update` - 🔍 **IDE关键设置**: - **Keil/IAR**:`Debug`选项卡确认选择`ST-LINK Debugger` - **STM32CubeIDE**: ```c // 检查SWD接口配置 SYS→Debug = Serial Wire ``` - **多设备场景**:通过`-i <ST-LINK S/N>`指定序列号(设备背面标签)[^1] #### 4. **信号层诊断** | 测试点 | 预期值 | 测量工具 | |----------------|-------------|-----------------| | `SWDIO`对`GND` | 3.3V脉冲 | 示波器/逻辑分析仪 | | `SWCLK`对`GND` | 1-4MHz钟 | 同上 | | `nRST`电平 | >2.0V (High)| 万用表 | - 🚫 **常见硬件故障**: - 目标板电容短路(重点检查`VDDA`引脚) - 信号线长度>20cm(需降低钟频率) #### 5. **网络层排查(远程调试)** - 🌐 **防火墙规则**: ```powershell netsh advfirewall firewall add rule name="ST-LINK" dir=in action=allow program="C:\STLink\stlink_server.exe" enable=yes ``` - 📡 **端口检测**: ```bash telnet <服务器IP> 7184 # 默认通信端口 ``` ### 典型错误解决方案 - **"ST-LINK communication error"**: 1. 降低SWD钟频率(IDE调试设置→`Clock`调至200kHz) 2. 短接目标板`BOOT0`至`VCC`进入下载模式 - **"No target connected"**: ```mermaid graph LR A[检查nRST电压] --> B{>2.0V?} B -->|否| C[检查复位电路] B -->|是| D[测量SWD信号] ``` > **注意**:若以上步骤无效,可能是ST-LINK硬件损坏(常见于静电击穿),建议更换调试器[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值