我有一个项目,通过Visual Studiobuild立和链接,但不是由我们的构build系统。
从我可以告诉,tchar.h包含一个macros来将_tmain转换成wmain,如果UNICODE被定义。 我检查了预处理器的输出,实际上_tmain已经被wmain替换了。 包含wmain的文件然后编译就好了,但是链接器抱怨main是未定义的。
LNK2019:函数__tmainCRTStartup中引用的未parsing的外部符号main
wmain是否被另一组macros指定为main,我没有正确包含(通过缺less-D选项等),还是有一个指定入口点的link.exe特殊标志。
谢谢。
手动指定/ entry:mainCRTStartup修复它。
编辑:我刚刚检查了main.obj文件。 wmain是绝对定义的。
MSVC使用一个特殊的运行时启动,这是什么调用预期的入口wmain()
, WinMain()
等
这些名字绝对不是什么神奇的东西。 如果您没有MSVC启动源代码,请实现您自己的启动模块以满足您的需求:
int main (int argc, char **argv, char **envp) { wchar_t **w_argv = some_conversion_function (argc, argv); wchar_t **w_envp = some_conversion_function (some_count_function (envp), envp); return wmain (argc, w_argv, w_envp); }
在那里我把some_conversion_function()
和some_count_function()
的实现some_conversion_function()
你。