Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VS2017和VS2015之间的链接器是否存在差异?_C++_Linker_Visual Studio 2017 - Fatal编程技术网

C++ VS2017和VS2015之间的链接器是否存在差异?

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

多年来,我一直在使用一个库“wot I write”,它有一个特殊的特性,它定义了
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 ****