Python 未解析的外部主符号(无下划线)

Python 未解析的外部主符号(无下划线),python,c,visual-c++,lnk2019,Python,C,Visual C++,Lnk2019,我试图将一个C程序(特别是Python解释器)编译成一个简单的静态链接64位Windows二进制文件。我的命令行如下所示: cl /DPy_BUILD_CORE ... /link Advapi32.lib Shell32.lib User32.lib 其中,…是源文件的长列表,包括目录规范,以及我为修复未解决的符号错误而添加的库规范。我现在得到这个错误: LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol main

我试图将一个C程序(特别是Python解释器)编译成一个简单的静态链接64位Windows二进制文件。我的命令行如下所示:

cl /DPy_BUILD_CORE ... /link Advapi32.lib Shell32.lib User32.lib
其中,
是源文件的长列表,包括目录规范,以及我为修复未解决的符号错误而添加的库规范。我现在得到这个错误:

LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup
你可能认为这个问题以前有人问过,但在本例中,
main
的拼写没有前导的
——这是我在谷歌搜索中发现的任何其他情况下都不会发生的。为了确保这一点,我尝试编写了一个minimal
main()
函数并将其抛出,但仍然给出了上面的错误和一个重复符号警告,所以这并不是缺少的


你知道这里出了什么问题吗?

你试着用入口点(不是静态链接库)像编译应用程序一样编译它。

来自python-win32邮件列表上的Jeremy Kloth:

文件列表还需要“.\Modules\python.c”来创建 可执行文件。(使用VS2008对x64进行了测试)

缺少前导下划线是因为符号是如何在中导出的 64位PEs与32位PEs。也就是说,64位PEs不在
下划线添加到导出的符号。

您是否正在尝试构建控制台应用程序?我在编译行中没有看到子系统。你用的是什么通话约定?我会从这些开始。@WhozCraig是的。我以前从未遇到过/子系统,cl表示从未听说过;参考资料是什么?我使用的命令行看起来像是通常用于构建命令行程序的命令行,包括默认的调用约定;我不知道一个.c文件的内容有什么方法可以打破标准库和另一个.c文件之间的调用约定?如你所问,在微软的网站上。这是一个链接器选项。调用约定是一个编译器选项(尽管我无法理解它的确切语法;sry)。@WhozCraig啊,谢谢!默认值是console,这是我想要的,但我尝试显式指定它只是为了确保,错误没有改变。我记得调用约定曾经是一个问题,但那是多年前的事了,当前版本的编译器在选项列表中确实没有提到它。是的,没错-我正试图将它编译成一个(独立的.exe)程序,不是作为一个库。也许OP想要创建一个包含所有依赖项的EXE静态链接。您的项目类型是什么?如果它是一个“Win32项目”,那么您的入口点应该是(w)WinMain。如果它是一个“Win32控制台项目”,那么它应该是(w)main。名称_tmain被定义为main或wmain,具体取决于是否定义了UNICODE。如果它是一个DLL,那么DllMain.int_tmain(int argc,_TCHAR*argv[])@Defter我根本没有使用IDE,我是从命令行调用编译器的。