Gui*_*oie 4 c++ winapi cmake clion visual-studio-2015
我无法使用 CLion 和 Visual Studio 2015 作为工具链编译简单的 WIN32 应用程序。这是我收到的链接器错误:
[ 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
Run Code Online (Sandbox Code Playgroud)
以下是重现该问题的代码的最简化版本。它包含在这两个文件中:
CMakeList.txt
cmake_minimum_required(VERSION 3.9.6)
add_executable(${PROJECT_NAME} WIN32 main.cpp)
Run Code Online (Sandbox Code Playgroud)主程序
#include <iostream>
int main(int argc, char **argv) {
std::cout << "HELLO WORLD!" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)有关我正在使用的工具的更多详细信息:
请指教
编辑 1
正如我所提到的,我尽可能地简化了代码以重现错误。因此,使用 std::out。真正的应用程序实际上是一个 QT 应用程序,而不是一个控制台应用程序。
我在 CMakeList.txt 文件中添加了 WIN32 参数,以便应用程序在执行 EXE 时直接启动 GUI(而不是加载命令行提示符然后加载 GUI)。
错误是可以预料的。它只是遵循该行的记录行为
add_executable(${PROJECT_NAME} WIN32 main.cpp)
Run Code Online (Sandbox Code Playgroud)
如果
WIN32给出属性WIN32_EXECUTABLE将在创建的目标上设置。有关详细信息,请参阅该目标属性的文档。
WIN32_EXECUTABLE的文档:
[...] 当此属性设置为 true 时,在 Windows 上链接的可执行文件将使用 WinMain() 入口点创建,而不仅仅是 main()。[...]
您有 2 个选择:
WIN32从add_executable命令中删除。int main(int, char**)为WinMain入口点:int CALLBACK WinMain(HINSTANCE, HINSTANCE, LPSTR, int).如果您不希望弹出控制台窗口,则第二个选项可能就是您要查找的内容。
| 归档时间: |
|
| 查看次数: |
3180 次 |
| 最近记录: |