Не могу найти точку входа

Я хотел создать новый проект С++ и начать кодирование. Я работаю в существующем решении с более чем 30 проектами. Поэтому вместо main() используется GwMain(..). Это работает для всех других файлов, но не когда я создаю новый проект С++. Я получаю ошибку компоновщика:

LNK2019 unresolved external symbol _main referenced in function "int__cdel invoke_main(void)" (?invoke_main@@YAHXZ)

File: MSVCRTD.lib(exe_main.obj)
  • Я уже сравнивал конфиги свойств с другими проектами, и они почти такие же. Решение перенесено с Visual Studio 2012 на 2019. Думаю, это одна из причин, почему оно не работает так, как должно.
  • Я уже проверил это: Linker->System->SubSystem -> Windows.

    И когда я меняю его с консоли на окна, он показывает это:

    Неразрешенный внешний символ LNK2019 _WinMain, указанный в функции "int__cdel invoke_main(void)" (?invoke_main@@YAHXZ)

  • И я не использую cmake
  • Когда я использую int main(){return 0;}, я не получаю ошибок, но мне приходится использовать GwMain()
  • Когда я меняю EntryPoint в разделе Advanced, я получаю больше ошибок. Пробовал вставить GwMain.

Код примерно такой:

#include <gwcore.hpp>
#include <gw.hpp>

int GwMain(int, char**)
{

    return 0;
}

Здесь используется очень старый фреймворк Grit.


person Community    schedule 18.02.2020    source источник
comment
Предоставьте минимально воспроизводимый пример.   -  person Yunnosch    schedule 18.02.2020
comment
Я почти уверен, что проблема в том, что вы неправильно связываетесь с какой-либо библиотекой GW, для которой она предназначена. Я понятия не имею, что это такое, но GwMain будет вызываться из библиотечной функции main (предположительно окруженной некоторым кодом инициализации и/или демонтажа, который необходимо запустить до/после GwMain. Я не знаком с этим, и не писал код для Windows уже много лет.   -  person Mats Petersson    schedule 18.02.2020


Ответы (2)


Пожалуйста, проверьте Проект > Свойства > Общие > Параметры проекта по умолчанию > Тип конфигурации.

Если это «.exe», то для этого проекта необходим файл main. В противном случае, если это «.dll» или «.lib», ваш код должен скомпилироваться.

person Raviteja Narra    schedule 18.02.2020
comment
Тип конфигурации — приложение (.exe). Но у меня есть несколько проектов, которые также используют GwMain вместо main в качестве точки входа и также являются .exe. - person ; 18.02.2020
comment
@S.Yildiz Посмотрите на эти другие исполняемые проекты, на какие библиотеки они ссылаются. Требуемая основная функция будет предоставлена ​​одной из этих библиотек, и вы еще не связались с ней. - person Aconcagua; 18.02.2020

После проверки всех вариантов компиляции и компоновки с другими проектами все работает нормально.

Из вашего решения выберите проект, который работает (и который использует GwMain). Правая кнопка-> свойство и проверьте его зависимости в "общих свойствах":

введите здесь описание изображения

Проделайте эту манипуляцию с другими проектами, которые работают правильно (и которые используют GwMain), и попытайтесь увидеть, есть ли общая зависимость, которая позволяет им использовать GwMain, а затем попробуйте добавить эту зависимость в свой проект. это не работает

person Landstalker    schedule 18.02.2020