c++ - 尝试减小输出大小后,Visual Studio 编译程序无法正确初始化

标签 c++ visual-studio-2015 compilation linker program-entry-point

我试图制作一个简单的 C++ 程序并使用 Visual Studio 编译它,并使用显着减小其大小的选项。

代码是:

int main(int argc, char** argv)
{
    return argc;
}

命令行是:

cl /O1 /GS- /Oi- test.cpp /link /nodefaultlib /safeseh:no /filealign:512 /entry:main /subsystem:console /MERGE:.rdata=.text

程序在没有警告的情况下编译和链接。它运行但不是返回参数的数量,而是从内存中返回随机数。

问题似乎是堆没有初始化,参数没有被解析,就像它们在 Windows 程序启动时应该正常进行的那样。我可能犯了什么错误?

编辑: 下面的答案都是正确的,并且是同时发布的,所以我不会接受一个,但是它们确实帮助了我,并且通过将我的程序与 kernel32.lib 链接起来和 shell32.lib 问题已解决。

最佳答案

argcargv 的初始化由C 运行时执行。使用 /nodefaultlib 选项,它们保持未初始化状态。您仍然可以使用 GetCommandLineWCommandLineToArgvW 自行检索命令行参数。

关于c++ - 尝试减小输出大小后,Visual Studio 编译程序无法正确初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43822003/

相关文章:

c++ - 捕获 boost 异常

c++ - 无论我输入什么字符,我的程序都会循环

Java Puzzler-这是什么原因?

c++ - 小型 clang 项目上的 std::terminate() 链接器错误

msbuild - 如何将 StyleCop 嵌入到解决方案中?

gwt - 大型 GWT 项目和编译时间问题

c++ - 对抗内存泄漏

c++ - 返回指针的最佳方式

c++ - C++ 中的字符串旋转器(按位旋转)

visual-studio - 如何从 TFS 中删除文件并从源代码管理中排除?