Удаление окна консоли для Glut/FreeGlut / GLFW?

в Visual C++ я играл с Glut/FreeGlut / GLFW. Кажется, что каждый из этих проектов добавляет окно cmd по умолчанию. Я попытался удалить его, идя под:

Свойства - >C / C++ - >Препроцессор - >Препроцессор Определения

отсюда я удаляю _CONSOLE и заменяю его на _WINDOWS

затем я пошел в:

Свойства->Компоновщик->Система->Подсистема

и я поставил опция для Windows (/Подсистема:WINDOWS)

затем, когда я пытаюсь скомпилировать под GLFW, я получаю следующие ошибки построения:

  • Ошибка 1 ошибка LNK2001: неразрешенный внешний символ _WinMain@16 Библиотеки msvcrt.Либ!--1-->

  • Ошибка 2 фатальная ошибка LNK1120: 1 неразрешенные внешние glfwWindow.exe

можно ли удалить окно консоли?

8 ответов


не консольные приложения Windows используют WinMain() конвенция точки входа. Ваши примеры перенасыщения, вероятно, используют стандартный C main() конвенции.

Если вы хотите быстро исправить только для демо-приложения, функция WinAPI FreeConsole() может помочь.

MSDN:http://msdn.microsoft.com/en-us/library/ms683150 (v=против 85).aspx


в параметрах компоновщика установите точку входа в функцию maincrtstartup . Эта функция выполняет необходимую настройку MS libc, а затем вызывает main.


мой проект просто main (без WinMain) и чтобы отключить консоль, я просто установил Linker - >System - >SubSystem в "Windows (/SUBSYSTEM:WINDOWS)" вместо "Console (/SUBSYSTEM:CONSOLE)" и консоль уходит.

вам не нужно возиться с определения препроцессора, чтобы удалить окно консоли.

Я знаю, что мой ответ опоздал на несколько лет, но я надеюсь, что это поможет.


большинство компоновщиков поддерживают параметры, которые автоматически удаляют код запуска консоли.

Я думаю, что на GCC это называется-mwindows


нужно писать WinMain точка входа и скопируйте существующий код (из main):

int CALLBACK WinMain(
  __in  HINSTANCE hInstance,
  __in  HINSTANCE hPrevInstance,
  __in  LPSTR lpCmdLine,
  __in  int nCmdShow
){
    // ...
}

чтобы избавиться от консоли с помощью cmake, флаги ссылок можно установить следующим образом:

set_target_properties(exe_name PROPERTIES 
    LINK_FLAGS "/ENTRY:mainCRTStartup /SUBSYSTEM:WINDOWS")

Если вы создаете новый проект как консольное приложение, он всегда будет работать как таковой. Вы должны создать новый проект GUI, если вы хотите запустить его в окно, иначе правильные заголовки и библиотеки не будут включены.

также функция WinMain, которая требуется, будет включена для вас в результирующие файлы шаблонов.


когда я получил такую ошибку, я смог ее исправить, введя следующий текст в линкер, раздел Advance, вариант Точка Входа следующее:

main