0

При сборке на платформе x64 в Visual Studio 2019 сборщик ругается на неразрешенный внешний символ __chkstk. Причем такой же код на платформе Win32 собирается без ошибок. В первом случае (x64) в компоновщике игнорируются все стандартные библиотеки (/NODEFAULTLIB), а на платформе Win32 - нет.

Ругается на эту строку:

LPCWSTR filenames[] = { file };

Немного кода main.cpp:

#include <Windows.h>
#include <string>
#include <strsafe.h>
#include <ShlObj.h>
#include <Shlwapi.h>
#include <TlHelp32.h>
#include <restartmanager.h>
#include <WinInet.h>
#include <intrin.h>
#include <wchar.h>
#include <stdlib.h>
#include <stdio.h>
#include <tchar.h>
#include <shellapi.h>
#include <cctype>
#include <iostream>

void RegProcess(const WCHAR* file) {

LPCWSTR filenames[] = { file }; // эта строка вызывает заявленную ошибку при сборке x64
DWORD hSess = 0;
WCHAR key[50] = SESS_NAME;
DWORD regresources;

RmStartSession(&amp;hSess, 0, key);
regresources = RmRegisterResources(hSess, 1, filenames, 0, NULL, 0, NULL);

//////////////////
// много кода
//////////////////

} ////////////////// // много кода //////////////////

void mainThread(LPWSTR fileApp) { RegProcess(fileApp);

//////////////////
// много кода
//////////////////

}

#ifdef _WINDLL #pragma comment(linker, "/ENTRY:DllMainCRTStartup") BOOL WINAPI DllMainCRTStartup(HMODULE hModule, DWORD dwReason, LPVOID lpReserved) #else BOOL WINAPI WinMainCRTStartup(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdShow, INT nCmdShow) #endif { #ifdef _WINDLL switch (dwReason) { case DLL_PROCESS_ATTACH: CloseHandle(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)mainThread, NULL, 0, NULL)); break; default: break; } return TRUE; #else mainThread(); ExitProcess(0); return EXIT_SUCCESS; #endif }

Настройки конфигурации: введите сюда описание изображения

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

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

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

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

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

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

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

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

Подозреваю, что какой то библиотеки не хватает. Подскажите как обойти эту ошибку, если действительно с ней сталкивались.

Ledorub
  • 71
  • 1
    "Подозреваю, что какой то библиотеки не хватает." - "В первом случае (x64) в компоновщике игнорируются все стандартные библиотеки (/NODEFAULTLIB), а на платформе Win32 - нет." – user7860670 Aug 28 '21 at 11:16
  • Вы можете подсказать какой не хватает? Я только учусь писать на С++. – Ledorub Aug 28 '21 at 17:56
  • Стандартной библиотеки не хватает, которую вы сам отключили использовав опцию /NODEFAULTLIB. – user7860670 Aug 28 '21 at 18:12
  • Да, но если я включаю стандартные библиотеки, тогда вываливается при сборке x64 ошибка: LNK2001 неразрешенный внешний символ WinMain. – Ledorub Aug 28 '21 at 19:16
  • Ну тогда значит это проблема XY. https://ru.stackoverflow.com/questions/536546/%d0%a1%d1%81%d1%8b%d0%bb%d0%ba%d0%b0-%d0%bd%d0%b0-%d0%bd%d0%b5%d1%80%d0%b0%d0%b7%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%bd%d1%8b%d0%b9-%d0%b2%d0%bd%d0%b5%d1%88%d0%bd%d0%b8%d0%b9-%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb-%d0%b2%d0%be%d0%b7%d0%bc%d0%be%d0%b6%d0%bd%d1%8b%d0%b5-%d0%bf%d1%80%d0%b8%d1%87%d0%b8%d0%bd%d1%8b – user7860670 Aug 29 '21 at 08:26
  • Скорей проблема ХЗ)).. от этого не легче новичкам, ведь нигде невозможно найти даже приблизительное решение подобной ошибки, связанной именно с __chkstk. Перелопачивать же все варианты - это жесть. – Ledorub Aug 29 '21 at 12:57
  • Так суть проблемы XY как раз в том, что проблема у вас не та, которая описана в вопросе, а с WinMain... – user7860670 Aug 29 '21 at 14:48
  • А можно кроме скринов еще и код увидеть, вместе со списком подключенных h-файлов? UPD: Хотя, если почитать MSDN (https://docs.microsoft.com/en-us/windows/win32/devnotes/-win32-chkstk) - то причина ошибки очевидна. А что там с WinMain - без кода уже не сказать – Alexey Vesker Aug 30 '21 at 08:48
  • "неразрешенный внешний символ WinMain" — попробуйте собирать консольное приложение... – Harry Aug 30 '21 at 11:08
  • Ок. Добавил немного кода со списком подключенных h-файлов. – Ledorub Aug 30 '21 at 17:32

0 Answers0