2016-10-14 66 views
1

这里的东西,伙计们:我得努力使我的程序的入口点故障
不叫main
早些时候,在Visual Studio 2012,这是很简单 - 我只是用/ENTRY链接器的键或我的项目的相同设置(项目 - >'project_name'属性...->链接器 - >高级 - >入口点),它正常工作:说,我有一个函数像这样:在Microsoft Visual Studio Redifining C/C++入口点2015年

int LetsRock 
{ 
    ... 
    return 0; 
} 

,我需要,如上文所述,只需设置/ENTRY:LetsRock,它第一次运行。

微软的Visual Studio 2015年企业版14.0.25123.00更新2东西变成很奇怪:

当我重新定义入口点,编译器给了我11个错误的一群(实际上是10 “原因仅11日说,有10个错误):

errors list

这里,他们是为那些,谁不想打开图片:

1>------ Build started: Project: Tester, Configuration: Debug Win32 ------ 
1> Source.c 
1>MSVCRTD.lib(_init_.obj) : error LNK2019: unresolved external symbol __CrtDbgReport referenced in function __CRT_RTC_INIT 
1>MSVCRTD.lib(_init_.obj) : error LNK2019: unresolved external symbol __CrtDbgReportW referenced in function __CRT_RTC_INITW 
1>MSVCRTD.lib(_error_.obj) : error LNK2019: unresolved external symbol ___stdio_common_vsprintf_s referenced in function __vsprintf_s_l 
1>MSVCRTD.lib(_pdblkup_.obj) : error LNK2019: unresolved external symbol __wmakepath_s referenced in function "int __cdecl GetPdbDllPathFromFilePath(wchar_t const *,wchar_t *,unsigned int)" ([email protected]@[email protected]) 
1>MSVCRTD.lib(_pdblkup_.obj) : error LNK2019: unresolved external symbol __wsplitpath_s referenced in function "int __cdecl GetPdbDllPathFromFilePath(wchar_t const *,wchar_t *,unsigned int)" ([email protected]@[email protected]) 
1>MSVCRTD.lib(_pdblkup_.obj) : error LNK2019: unresolved external symbol _wcscpy_s referenced in function "int __cdecl GetPdbDllPathFromFilePath(wchar_t const *,wchar_t *,unsigned int)" ([email protected]@[email protected]) 
1>MSVCRTD.lib(_pdblkup_.obj) : error LNK2019: unresolved external symbol ___vcrt_GetModuleFileNameW referenced in function "struct HINSTANCE__ * __cdecl GetPdbDll(void)" ([email protected]@[email protected]@XZ) 
1>MSVCRTD.lib(_pdblkup_.obj) : error LNK2019: unresolved external symbol ___vcrt_GetModuleHandleW referenced in function "struct HINSTANCE__ * __cdecl GetPdbDll(void)" ([email protected]@[email protected]@XZ) 
1>MSVCRTD.lib(_pdblkup_.obj) : error LNK2019: unresolved external symbol ___vcrt_LoadLibraryExW referenced in function "struct HINSTANCE__ * __cdecl GetPdbDll(void)" ([email protected]@[email protected]@XZ) 
1>MSVCRTD.lib(_chandler4gs_.obj) : error LNK2019: unresolved external symbol __except_handler4_common referenced in function __except_handler4 
1>C:\<path to my folder>\Tester\Debug\Tester.exe : fatal error LNK1120: 10 unresolved externals 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

事实证明,即使陌生人 - 如果我设置入口点设置为main(当然,这里我也在源文件中重命名我的功能),它仍然不起作用。相同的一组错误。

因此,问题是:
如何正确地重新定义Visual Studio 2015中C/C++项目的入口点?

如果这是不可能的,为什么他们最后没有去掉这个设置?

+3

它做[*非常*在VS2015中有所不同](https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/)。由于您绕过了C运行时初始化,因此您不再获得隐式链接要求。你现在必须自己处理这个,Project> Properties> Linker> Input> Additional Dependencies,然后添加vcruntimed.lib和ucrtd.lib。请记住这是不恰当的,你正在使用Debug配置设置进行编译,但不会初始化CRT的调试功能。 –

+0

@HansPassant是的,我的感谢 - 与你建议编译的额外库。 – KKastaneda

回答

1

好吧,作为Hans Passant建议,我刚刚添加更多.lib依赖关系:vcruntimed.libucrtd.lib,它工作正常。这是编译Release配置,而这些库,但这种方式可能无法正确铁锅 - 在我的情况下,程序

#include <stdio.h> 

int LetsRock() 
{ 
    getchar(); 
    return 0; 
} 

没有跑,说error LNK2001: unresolved external symbol __imp__getchar

+0

那么,这将是另一个糟糕代码的例子。由于您绕过了CRT初始化,因此无法调用任何* CRT功能。你没有初始化* stdin *。也许它有效,也许它不会,明天可能不起作用。 –

+0

那么是否有可能重新定义你的入口点并初始化CRT? – ComradeJoecool