2014-02-21 73 views
1

我試圖在命令行上用Visual Studio 2008構建一個程序。 讀完後Walkthrough: Compiling a Native C++ Program on the Command Line。 我試過如下:如何在命令行上使用Visual Studio編譯時包含庫?

運行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 [email protected] referenced in function [email protected] 
simple.exe : fatal error LNK1120: 1 unresolved externals 

這使我相信我需要包含user32.lib或類似的東西。 我無法從視覺工作室手冊中找到如何做到這一點。

+0

您可能想要查找一些似乎與鏈接有關的[編譯器選項](http://msdn.microsoft.com/en-us/library/9s7c9wdw.aspx)。 –

+2

我經常發現使用Visual Studio IDE很有幫助。一旦我得到我的項目在那裏建立,我可以去項目屬性的最後一個選項卡之一,看到它決定放入的所有命令行選項,然後複製/粘貼這些選項爲我的命令行。 – jia103

+0

這是個好主意,jia103。 –

回答

2

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

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

/MT選擇運行時庫。在這個例子中,我使用了多線程靜態庫。

2

你是對的,MessagBoxAUser32.lib中定義,你需要鏈接你的代碼。您可以將連接器選項提供給CL編譯器,並將其傳遞給鏈接器。您只需將User32.lib添加到彙編字符串中即可:cl /EHsc /GA simple.cpp User32.lib

相關問題