Удаление окна консоли для 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