﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-云淡风清的C++博客-随笔分类-我的摸索之路(C++)</title><link>http://www.cppblog.com/dufenglei908/category/7685.html</link><description>欢迎大家来指导</description><language>zh-cn</language><lastBuildDate>Mon, 28 Jul 2008 09:26:50 GMT</lastBuildDate><pubDate>Mon, 28 Jul 2008 09:26:50 GMT</pubDate><ttl>60</ttl><item><title>常见调试错误：fatal error LNK1561: entry point must be defined</title><link>http://www.cppblog.com/dufenglei908/archive/2008/07/28/57359.html</link><dc:creator>云淡风清</dc:creator><author>云淡风清</author><pubDate>Mon, 28 Jul 2008 08:33:00 GMT</pubDate><guid>http://www.cppblog.com/dufenglei908/archive/2008/07/28/57359.html</guid><wfw:comment>http://www.cppblog.com/dufenglei908/comments/57359.html</wfw:comment><comments>http://www.cppblog.com/dufenglei908/archive/2008/07/28/57359.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dufenglei908/comments/commentRss/57359.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dufenglei908/services/trackbacks/57359.html</trackback:ping><description><![CDATA[<p dir=ltr style="MARGIN-RIGHT: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天，在VC的开发之路上继续摸索前行时，碰到一个连接错误&#8220;fatal error LNK1561: entry point must be defined&#8221;，查了很多资料都没能够解决，最终查到是连接命令中的/subsystem不正确，改为/subsystem:windows后一切正常，特此写下随笔一篇，加深自己的印象。<br><br>附：VC知识库中的一段相关文章<br><br></p>
<p align=center><font color=#0033ff><strong>如何屏蔽控制台应用程序的窗口？</strong></font><br>(hangwire发表于2004-9-11 15:40:02)</p>
<p>　　众所周知，控制台应用程序一般都会显示一个控制台窗口（虚拟DOS窗口），但很多时候控制台程序的执行逻辑根本不需要与用户进行交互，所以显示这个难看的窗口纯属多余，那么如何将它屏蔽掉呢？下面我向大家介绍一种方法。<br>　　操作系统装载应用程序后，做完初始化工作就转到程序的入口点执行。程序的默认入口点实际上是由连接程序设置的，不同的连接器选择的入口函数也不尽相同。在VC下，连接器对控制台程序设置的入口函数是 mainCRTStartup，mainCRTStartup 再调用你自己编写的 main 函数；对图形用户界面（GUI）程序设置的入口函数是 WinMainCRTStartup，WinMainCRTStartup 调用你自己写的 WinMain 函数。<br>具体设置哪个入口点是由连接器的&#8220;/subsystem:&#8221;选项参数确定的，它告诉操作系统如何运行编译生成的.EXE文件。可以指定四种方式：&#8220;CONSOLE|WINDOWS|NATIVE|POSIX&#8221;如果这个选项参数的值为&#8220;WINDOWS&#8221;，则表示该应用程序运行时不需要控制台，有关连接器参数选项的详细说明请参考 MSDN 库。<br>下面我们将通过预编译指令来对编译器和连接器进行设置，从而达到我们的目的：例子代码运行后播放Windows系统启动声音三次，然后退出，运行后不会显示控制台窗口。<br><br>#include &lt;windows.h&gt;<br>#include &lt;mmsystem.h&gt;<br><br>#pragma comment(lib,"winmm.lib") // 告诉连接器与这个库连接，因为我们要播放多媒体声音<br>#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )&nbsp;&nbsp;// 设置连接器选项<br><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img id=Codehighlighter1_15_235_Open_Image onclick="this.style.display='none'; Codehighlighter1_15_235_Open_Text.style.display='none'; Codehighlighter1_15_235_Closed_Image.style.display='inline'; Codehighlighter1_15_235_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_15_235_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_15_235_Closed_Text.style.display='none'; Codehighlighter1_15_235_Open_Image.style.display='inline'; Codehighlighter1_15_235_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_15_235_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_15_235_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;PlaySound(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SystemStart</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,NULL,&nbsp;SND_ALIAS</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">SND_SYNC);<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Sleep(</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;PlaySound(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SystemStart</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,NULL,&nbsp;SND_ALIAS</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">SND_SYNC);<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Sleep(</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;PlaySound(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SystemStart</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,NULL,&nbsp;SND_ALIAS</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">SND_SYNC);<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Sleep(</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p><br><br>在 IDE 环境中新建一个空的控制台程序，将上述代码添加到工程中，编译运行。</p>
<img src ="http://www.cppblog.com/dufenglei908/aggbug/57359.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dufenglei908/" target="_blank">云淡风清</a> 2008-07-28 16:33 <a href="http://www.cppblog.com/dufenglei908/archive/2008/07/28/57359.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>