C++ VS2017和VS2015之间的链接器是否存在差异?
多年来,我一直在使用一个库“wot I write”,它有一个特殊的特性,它定义了C++ VS2017和VS2015之间的链接器是否存在差异?,c++,linker,visual-studio-2017,C++,Linker,Visual Studio 2017,多年来,我一直在使用一个库“wot I write”,它有一个特殊的特性,它定义了main() 这意味着我编写的应用程序本身不必有main,因为链接器已经有了一个未解析的引用,并在我的库中查找它 该技术已在多个平台上运行,包括VS2005/2008/2015。现在,我刚刚安装了VS2017,并开始了一个新项目,该项目引用了使用VS2015构建的库 新项目只有一个源文件,如下所示: // necessary #includes elided namespace gp { void Opti
main()
这意味着我编写的应用程序本身不必有main
,因为链接器已经有了一个未解析的引用,并在我的库中查找它
该技术已在多个平台上运行,包括VS2005/2008/2015。现在,我刚刚安装了VS2017,并开始了一个新项目,该项目引用了使用VS2015构建的库
新项目只有一个源文件,如下所示:
// necessary #includes elided
namespace gp {
void Options(Run& runner) {
runner << "test2017";
}
}
但是,只需将这些行添加到一个源文件:
int main(int, char*[]);
auto p = &main;
程序链接并运行,我得到了预期的输出:
**** test2017 ****
尝试将
/SUBSYSTEM:CONSOLE
指定给链接器。这是因为它可能搜索的是WinMain
,而不是main
在项目的属性页中,您可以在链接器/系统/子系统中设置此项,并选择
控制台(/SubSystem:Console)
(而不是Windows(/SubSystem:Windows)
)为什么主外部“C”?好的,很好。外部“C”是是不相关的。我将从问题中删除它。我在尝试使链接器工作的某个时候将它放入,但从未将其删除以进行检查。谢谢。如果您在2017年重新编译库,它会改变什么吗?可能它正在搜索WinMain
,而不是main
?如果指定/SUBSYSTEM:CO会发生什么NSLE
到链接器?@marglisse这是我的下一步。但我现在不能这么做……根本原因是我创建了一个新的空项目。我想我应该创建一个新的Windows控制台应用程序。
**** test2017 ****