You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code编译含WinMain的DLL项目遇LNK2019链接错误求助

问题原因分析

链接错误的核心原因有两个:

  1. 入口点不匹配:你用WinMain作为程序入口,但CMake默认将可执行程序编译为控制台子系统(从编译输出的/SUBSYSTEM:CONSOLE可确认),控制台程序的预期入口是main函数,因此链接器找不到main符号抛出LNK2019错误。
  2. DLL函数未正确导出:你的HelloWorld函数在头文件中声明为EXPORT,但实现时未添加EXPORT修饰,导致该函数不会被DLL导出,即使编译通过,运行时也会出现找不到函数的错误。
解决步骤

1. 修正CMake配置,指定GUI子系统

修改source/CMakeLists.txt,在add_executable(programa_dinamica SampleApp.cpp)之后添加以下配置,告诉CMake这是一个Windows GUI程序,使用WinMain作为入口:

# 标记为WIN32 GUI程序,自动设置/SUBSYSTEM:WINDOWS链接选项
set_target_properties(programa_dinamica PROPERTIES
    WIN32_EXECUTABLE YES
)

2. 修正DLL函数的导出修饰

修改SampleDLL.cpp中的HelloWorld函数实现,添加EXPORT修饰,确保函数被正确导出:

EXPORT void HelloWorld()
{
    MessageBox( NULL, TEXT("Hello World"), TEXT("In a DLL"), MB_OK);
}

3. 重新编译

清理现有build目录,重新执行编译命令:

cd build
rm -rf *  # 或者直接删除build文件夹重建
cmake ../source
cmake --build . --verbose

完成以上步骤后,链接错误会被修复,程序编译通过后运行会弹出Hello World的消息框。

内容的提问来源于stack exchange,提问作者Gabriel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:02:55