【问题标题】:How to include libraries when compiling with Visual Studio on command line?在命令行上使用 Visual Studio 编译时如何包含库?
【发布时间】:2014-03-22 14:34:56
【问题描述】:

我正在尝试在命令行上使用 Visual Studio 2008 构建程序。 看完Walkthrough: Compiling a Native C++ Program on the Command Line。 我尝试了以下方法:

运行 vcvaralls.bat 设置环境:

"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"

编写了这个简单的 C++ 应用程序:

#define _WIN32_WINNT 0x501
#include <windows.h>
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int nCmdShow)
{
    MessageBoxA(0,"Hello","Hello",MB_OK);

    return 0;
}`

并试图编译它:

cl /EHsc /GA simple.cpp

这会发生:

/out:simple.exe
simple.obj
simple.obj : error LNK2019: unresolved external symbol __imp__MessageBoxA@16 referenced in function _WinMain@16
simple.exe : fatal error LNK1120: 1 unresolved externals

这让我相信我需要包含 user32.lib 或类似文件。 我无法从视觉工作室手册中弄清楚如何做到这一点。

【问题讨论】:

  • 您可能想寻找一些似乎与链接有关的compiler options
  • 我经常发现使用 Visual Studio IDE 很有帮助。一旦我在那里构建了我的项目,我可以转到项目属性中的最后一个选项卡并查看它决定放入的所有命令行选项,然后将这些选项复制/粘贴到我的命令行中。跨度>
  • 好主意,jia103。
  • 打开帮助索引并寻找生成文件向导。您也可以右键单击项目名称,单击属性,配置管理器并查看命令行选项。
  • @Someprogrammerdude,我想指出,在发布这个问题之前,我花了好几个小时在编译器上筛选 MSDN 文档。事实证明没有特殊的选项,您只需将库名称与源文件一起包含在内。这不是我所期望的,因此没有寻找。

标签: c++ c winapi visual-c++ command-line


【解决方案1】:

是的,要使用 MessageBox,您至少需要与 User32.lib 链接,如 here 所示。使用:

cl /EHsc /GA /MT simple.cpp User32.lib

/MT 选择运行时库。在这个例子中,我使用了多线程静态库。

【讨论】:

    【解决方案2】:

    你是对的,MessagBoxA 是在User32.lib 中定义的,你需要将你的代码与它链接起来。您可以为CL 编译器提供链接器选项,它会将其传递给链接器。您需要做的就是将User32.lib 添加到您的编译字符串中:cl /EHsc /GA simple.cpp User32.lib

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 2012-11-29
      相关资源
      最近更新 更多