При сборке на платформе 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(&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
}
Подозреваю, что какой то библиотеки не хватает. Подскажите как обойти эту ошибку, если действительно с ней сталкивались.









/NODEFAULTLIB. – user7860670 Aug 28 '21 at 18:12