VS2017和VS2015之间的连接器是否存在差异?

时间:2017-10-31 12:46:57

标签: c++ linker visual-studio-2017

多年来,我一直在使用图书馆,而且我已经写过'它具有特殊的特性,因为它定义了main()

这意味着我写的应用程序不必自己拥有main,因为链接器已经有一个未解析的引用,并且正在寻找它并在我的库中找到它。

这项技术已在多个平台上发挥作用,包括VS2005 / 2008/2015。现在我刚刚安装了VS2017并启动了一个新项目,引用了使用VS2015构建的库。

新项目只有一个这样的源文件:

// necessary #includes elided
namespace gp {
    void Options(Run& runner) {
        runner << "test2017";
    }
}

我的期望是这个文件将编译并链接到我的库(例如,在那里声明并定义了类型Run)。

然后链接器抱怨:

LINK : fatal error LNK1561: entry point must be defined

但是,只需将这些行添加到一个源文件中:

int main(int, char*[]);
auto p = &main;

程序链接并运行,我得到预期的输出:

**** test2017 ****

1 个答案:

答案 0 :(得分:2)

尝试为链接器指定/SUBSYSTEM:CONSOLE。这是因为它可能会搜索WinMain而不是main

在项目的属性页中,您可以在链接器/系统/子系统中进行设置,然后选择Console (/SUBSYSTEM:CONSOLE)(而不是Windows (/SUBSYSTEM:WINDOWS)