首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用CLion/CMake/MSVC 2015编译WIN32应用程序时的链接错误

用CLion/CMake/MSVC 2015编译WIN32应用程序时的链接错误
EN

Stack Overflow用户
提问于 2018-02-21 20:50:45
回答 2查看 4.7K关注 0票数 4

我无法使用Visual 2015作为工具链使用WIN32编译简单的CLion应用程序。下面是我得到的链接器错误:

代码语言:javascript
复制
[ 50%] Linking CXX executable test-test.exe
MSVCRTD.lib(exe_winmain.obj) : error LNK2019: unresolved external symbol WinMain referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)
test-test.exe : fatal error LNK1120: 1 unresolved externals
LINK Pass 1 failed. with 1120

下面是再现问题的代码的最简化版本。它包含在这两个文件中:

  • CMakeList.txt Cmake_minimum_required(版本3.9.6) add_executable(${PROJECT_NAME} WIN32 main.cpp)
  • main.cpp #包括int (int,char **argv) { std::cout << "HELLO!“<< std::endl;返回0;}

关于我正在使用的工具的更多细节:

  • (最新版本)
    • 我还用以前的非EAP版本进行了测试,结果也是一样的。
    • CLion的工具链体系结构被设置为x86_amd64
    • CLion的CMake构建类型设置为Debug

  • CMake 3.9.6
  • Visual Studio 2015 (社区)

请指教

编辑1

正如我提到的,我尽可能地简化了代码以再现错误。因此,使用std::out。实际上,真正的应用程序是QT应用程序,而不是控制台应用程序。

我在WIN32文件中添加CMakeList.txt参数,以便应用程序在执行EXE时直接启动GUI (而不是加载命令行提示符,然后加载GUI)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-22 11:02:30

这个错误是意料之中的。它只是遵循行的记录行为。

代码语言:javascript
复制
add_executable(${PROJECT_NAME} WIN32 main.cpp)

来自可执行文件

如果赋予WIN32属性,则将在所创建的目标上设置可执行。有关详细信息,请参阅该目标属性的文档。

可执行文档

..。当此属性设置为true时,当在Windows上链接时,将使用WinMain()入口点而不是仅仅main()创建可执行文件。..。

你有两个选择:

  • WIN32命令中删除add_executable
  • int main(int, char**)替换为WinMain入口点:int CALLBACK WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

第二个选项可能是您想要的东西,如果您不希望一个控制台窗口弹出。

票数 5
EN

Stack Overflow用户

发布于 2018-02-22 13:44:19

稽查表的优秀答案对此做了很好的介绍,但我有一个小的补充。

因为您编写了一个Qt应用程序:Qt提供了一种机制来以可移植的方式处理这个问题。

Qt附带了一个静态库qtmain.lib,它为您定义了一个WinMain()函数,它只是将所有命令行参数转发给main函数(对于Win32可执行文件,它只是一个普通函数)。对于Qt5,您可以简单地向CMakeLists.txt添加以下内容

代码语言:javascript
复制
if(WIN32)
    target_link_libraries(${PROJECT_NAME} PUBLIC Qt5::WinMain)
endif()

注意,只有在以前的Qt5调用已经正确找到了find_package时,这才能起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48915216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档