首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接到CRT (未解析的外部符号WinMainCRTStartup)

链接到CRT (未解析的外部符号WinMainCRTStartup)
EN

Stack Overflow用户
提问于 2015-01-17 23:07:27
回答 1查看 1.7K关注 0票数 1

我正在尝试创建一个windows应用程序并静态地链接到CRT。我得到了这个错误,

链接:错误LNK2001:未解析的外部符号WinMainCRTStartup

我正在用这个命令行编译

代码语言:javascript
复制
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\cl.exe" /c main.cpp /O2 /I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" /I"C:\Program Files (x86)\Windows Kits\8.1\include\um" /I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" /I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\Include" /DWIN32 /D_WINDOWS /Zi /MT /nologo

并链接到此命令行。

代码语言:javascript
复制
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\link.exe" user32.lib libcmt.lib kernel32.lib main.obj crt_win64.obj /SUBSYSTEM:WINDOWS /DEBUG /nologo /MACHINE:x64 /LIBPATH:"C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\Lib"

如您所见,我在编译器上使用/MT开关,在链接器上使用/SUBSYSTEM:WINDOWS开关。

我还链接到libcmt.lib。

我的主要功能的签名是

代码语言:javascript
复制
int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-14 13:44:00

去死吧。

下面是关于VStudio (C / C++)构建的一堆有用的东西(我过去在处理各种挑战时遇到的):

当然,一种方法是手动指定每条路径,但这可能非常痛苦(特别是在交叉构建时)。

这就是VCVarsAll (也是VSDevCmd,但我更喜欢前者)发挥作用的地方。它为当前的构建配置设置了所有与VC相关的路径(.lib文件路径,甚至构建工具),因此您不必担心它们。有关更多细节,请查看[MS.Docs]:使用命令行中的Microsoft C++工具集

通常,vcvarsall.bat (可能还想检查[MS.MSDN.Social]:vcvarsall.bat文件在哪里?)位于:

  • VStudio 2005 (8)及以上:
代码语言:javascript
复制
- _**${VSTUDIO\_INSTALL\_DIR}\VC**_
  • VStudio 2017 (15)及以上:
代码语言:javascript
复制
- _**${VSTUDIO\_INSTALL\_DIR}\VC\Auxiliary\Build**_

构建命令可能是什么样子:

代码语言:javascript
复制
:: Setup build for pc064
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" amd64

:: Compile
cl /nologo /O2 /DWIN32 /D_WINDOWS /Zi /MD /Fomain.obj /c main.cpp

:: Link
link /NOLOGO /DEBUG /MACHINE:x64 /SUBSYSTEM:WINDOWS /OUT:main.exe main.obj kernel32.lib user32.lib

当然,您可以为构建创建一个Makefile.mak:[MS.Docs]:运行NMAKE

注意到:由于vcvarsall.bat向现有的环境变量(PATH,INCLUDE,LIBPATH,.)添加了(很多)目录,所以多次启动它(在pc032和pc064构建之间切换)可能会导致达到变量字符限制(32760) (这会引发问题)。因此,最好为每个目标CPU体系结构打开一个Cmd窗口(并且不要多次启动VCVarsAll )。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28005324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档