构建没有CRT和默认标头的控制台应用程序?

ano*_*439 7 c++ windows visual-studio-2008 visual-c++

我试图在不使用CRT的情况下构建控制台应用程序,或者在任何情况下都使用除kernel32.lib之外的任何其他导入.我得到了我的代码进行编译,但无法将链接器包装成几个问题:

unresolved external symbol @__security_check_cookie@4
unresolved external symbol "int __cdecl FreeLibrary(void *)" (?FreeLibrary@@YAHPAX@Z)
unresolved external symbol "void * __cdecl LoadLibraryW(wchar_t *)" (?LoadLibraryW@@YAPAXPA_W@Z)
unresolved external symbol "int (__cdecl*__cdecl GetProcAddress(void *,char *))(void)" (?GetProcAddress@@YAP6AHXZPAXPAD@Z)
unresolved external symbol _wmainCRTStartup
Run Code Online (Sandbox Code Playgroud)

FreeLibrary,LoadLibraryW和GetProcAddress我已经明确地引入了程序,而不是使用windows.h:

#pragma comment(lib, "kernel32.lib")

typedef int(*FARPROC)();

void* LoadLibraryW( wchar_t* lpLibFileName );
FARPROC GetProcAddress( void* hModule, char* lpProcName );
int FreeLibrary( void* hLibModule );
Run Code Online (Sandbox Code Playgroud)

我想我的原型有问题.然而,更大的问题是__security_check_cookie_wmainCRTStartup,这显然有事情做与CRT.所以我想知道如何重写int wmain(int argc, wchar_t* argv[])入口点的默认值,以及如何摆脱安全cookie.

act*_*.se 4

_wmainCRTStartup是调用wmain()的函数

IIRC 它应该在您可以链接的某些 .o 文件中可用,请查看您的 lib 目录。

也许这也是有用的阅读:Reduce EXE and DLL Size with LIBCTINY.LIB(和 Matt Pietrek 岩石:-)