多年来,我一直在使用图书馆,而且我已经写过'它具有特殊的特性,因为它定义了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 ****
答案 0 :(得分:2)
尝试为链接器指定/SUBSYSTEM:CONSOLE
。这是因为它可能会搜索WinMain
而不是main
。
在项目的属性页中,您可以在链接器/系统/子系统中进行设置,然后选择Console (/SUBSYSTEM:CONSOLE)
(而不是Windows (/SUBSYSTEM:WINDOWS)
)