Как указать link.exe использовать wmain в качестве точки входа. LNK2019: неразрешенный главный символ внешнего символа, на который ссылается функция __tmainCRTStartup - PullRequest
4 голосов
/ 07 января 2012

У меня есть проект, который собирает и связывает через Visual Studio, но не с помощью нашей системы сборки.

Из того, что я могу сказать, tchar.h содержит макрос для преобразования _tmain в wmain, если определен UNICODE. Я проверил вывод препроцессора, и действительно, _tmain был заменен на wmain. Затем файл, содержащий wmain, компилируется просто отлично, но компоновщик жалуется, что main не определена.

LNK2019: основной неразрешенный внешний символ, на который ссылается функция __tmainCRTStartup

Преобразуется ли wmain в main другим набором макросов, которые я не включаю должным образом (из-за отсутствия параметров -D и т. Д.), Или существует специальный флаг для link.exe, который указывает точку входа.

Спасибо.

Указание вручную / запись: mainCRTStartup исправил это.

Edit: Я только что проверил файл main.obj. wmain определенно определен.

1 Ответ

0 голосов
/ 07 января 2012

MSVC использует своеобразный запуск во время выполнения, который вызывает ожидаемую точку входа wmain(), WinMain() и т. Д.

В этих именах нет ничего магического.Если у вас нет исходного кода запуска MSVC, создайте свой собственный модуль запуска для удовлетворения ваших потребностей:

int main (int argc, char **argv, char **envp)
{
    wchar_t **w_argv =  some_conversion_function (argc, argv);
    wchar_t **w_envp =  some_conversion_function (some_count_function (envp), envp);
    return wmain (argc, w_argv, w_envp);
}

, где я оставляю вам реализацию some_conversion_function() и some_count_function().

...