Удаление окна консоли для Glut / FreeGlut / GLFW? - PullRequest
7 голосов
/ 13 мая 2011

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

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

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

Тогда я пошел под:

свойства-> Linker-> Система-> Subsystem

И я установил опцию на Windows (/ SUBSYSTEM: WINDOWS)

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

  • Ошибка 1 Ошибка LNK2001: не устранена внешний символ _WinMain @ 16 Msvcrt.lib

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

Можно ли убрать окно консоли?

Ответы [ 8 ]

15 голосов
/ 05 июня 2011

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

10 голосов
/ 18 июня 2014

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

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

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

8 голосов
/ 07 июля 2011

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

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

6 голосов
/ 13 мая 2011

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

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

MSDN: http://msdn.microsoft.com/en-us/library/ms683150(v=vs.85).aspx

1 голос
/ 17 октября 2017

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

set_target_properties(exe_name PROPERTIES 
    LINK_FLAGS "/ENTRY:mainCRTStartup /SUBSYSTEM:WINDOWS")
1 голос
/ 13 мая 2011

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

int CALLBACK WinMain(
  __in  HINSTANCE hInstance,
  __in  HINSTANCE hPrevInstance,
  __in  LPSTR lpCmdLine,
  __in  int nCmdShow
){
    // ...
}
0 голосов
/ 13 мая 2011

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

1010 * Основной *

0 голосов
/ 13 мая 2011

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

Также необходимая функция WinMain будет включена для вас в файлы шаблонов.

...