VC6 0編譯器的一些options

2021-05-25 05:07:19 字數 2632 閱讀 2983

進行編譯,就能生成乙個簡單的hello.exe檔案。其實這個可執行檔案的產生需要呼叫兩個程式:cl.exe和link.exe。

先看一看cl.exe的options:

/nologo /mld /w3 /gm /gx /zi /od /d "win32" /d "_debug" /d "_windows" /d "_mbcs" /fp"debug/hello.pch" /yx /fo"debug/" /fd"debug/" /fd /gz /c

再看一看link.exe的options:

kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib

uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib

shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /subsystem:windows /incremental:yes

/pdb:"debug/hello.pdb" /debug /machine:i386 /out:"debug/hello.exe" /pdbtype:sept

下面就來解析一下這些引數的含義:

cl編譯器:

雜項-miscellaneous-:

1. /nologo

2. /c   compile only, no link

3. /wset warning level (default n=1)

4. /yx[file]  automatic .pch

預處理-preprocessor-:

5. /d定義乙個巨集,比如 /dwin32 。其實/dwin32 和在原始檔的偽指令 #define win32是一樣的。

輸出檔案-output files-:

6. /focl的輸出檔案就是.obj檔案。這裡可以指定.obj檔案的路徑和名稱。

7. /fd[file]     cl也會輸出乙個.pdb檔案,預設情況下為vc60.pdb。這裡可以指定pdb檔案的名稱。

8. /fpcl也會輸出乙個.pch檔案,預設情況下和可執行檔名相同。這裡指定路徑和名稱(precompiled header file)。

**生產-code generation-:

9. /gz   _stdcall calling convention

/gd   _cdecl calling convention

10. /gm[-]    enable minimal rebuild

11. /gx[-]    enable c++ eh (same as /ehsc)

**優化-optimization-:

12. /od    disable optimizations (default)

鏈結選項-linking-:

13. /mld    link with libcd.lib debug lib

語言-language-: 

14. /zi   enable edit and continue debug info

link鏈結器:

linker我通過google「vc link options」搜了一些資訊,搜到了microsoft的官方**。找到了「c/c++ building reference」,裡面有compiler options和liner options:

1. /debug:用於建立乙個.pdb(program database )檔案,此檔案中包含本程式的debugging information。 

2. 預設情況下,生成的.pdb檔案的名稱和可執行檔案的名字是一樣的,並且和可執行檔案在同乙個目錄下。如果要手動指定.pdb檔案的名稱和路徑,就要用到/pdb選項。比如:/pdb:debug/hello.pdb

注意:if /debug is not specified, the /pdb option is ignored。

3. /subsystem:windows 子系統選擇,常用的就兩個:windows和console。

4. /out:filename  /out選項可以指定生產的可執行檔案的名字和路徑

5. /machine:i386 硬體平台,我們常用的電腦都是x86平台的。

有乙個地方需要十分地注意:

我們看到上面cl.exe的options中有乙個選項: /d "_windows" 。這個選項的意思前面已經說過了,就類似於在程式中有這樣一條語句:

#define _windows

可是我在文件里查到的「/d」的用法是:/dname[=|#]。就是說/d和它後面的那個name之間是沒有空格的,也沒有雙引號。為什麼這裡會有雙引號和空格呢?經過自己試驗,發現這個空格和雙引號是這個整合開發環境自動加上的。假設我要用/d定義乙個巨集page_size,我可以在這個「project options」下面的文字框中輸入 /dpage_size ,然後我點ok按鈕後,再重新開啟這個對話方塊,就會看到已經變成 /d "page_size" 。別的選項也是類似的。呵呵,這點可需要注意一下噢。

VC6 0 編譯器BUG修正收集

1.error spawning bscmake.exe 解決 project,setting,browse info,去掉選項build browse info file 2.fatal error lnk1210 exceeded internal ilk size limit relink w...

關於VC6 0 和其他VS編譯器

最近想寫一些 mfc應用程式,在發布的時候遇到了幾個問題,從中得到了一點體會,與大家分享一下。遇到的幾方面問題的起因 1.自己用vs 剛換win7 編譯好的程式在其他人那裡無法執行,提示缺少 mfc庫 2.上面的問題好解決,用靜態 mfc方式重新發布,卻發現原本 200多 k的程式變成了 1m多。3...

這算是VC6 0編譯器的乙個Bug麼?

首先看看上面這段c 按照c語言的運算子優先順序規則,這個程式的執行結果應該是18 首先執行完小括號裡的三個 a,這時a就為6,然後在執行加法運算,3個a相加自然等於18 可是我在vc6.0下編譯這段程式時,如果編譯為debug版,則輸出結果為16,如果編譯為release版本,則輸出結果為18。為什...