1. 程式人生 > >vs2010下使用nmake編譯庫的注意事項

vs2010下使用nmake編譯庫的注意事項

1.要想vs2010客戶端程式能夠斷點除錯到庫的程式碼中,編譯之前,在庫的Makefile檔案中CFLAG選項中加入(-Z7,-Zi,-ZI),使編譯好的二進位制檔案中帶有除錯資訊。

例如:CFLAG=/Ox /W3 /wd4996 /nologo /Z7

知識點:1.

為了除錯一個程式,首先必須使程式中包含除錯資訊。一般情況下,一個從AppWizard建立的工程中包含的Debug Configuration自動包含除錯資訊,但是是不是Debug版本並不是程式包含除錯資訊的決定因素,程式設計者可以在任意的 Configuration中增加除錯資訊,包括Release版本。
為了增加除錯資訊,可以按照下述步驟進行:

a 開啟Project settings對話方塊(可以通過快捷鍵ALT+F7開啟,也可以通過IDE選單Project/Settings開啟)

b 選擇C/C++頁,Category中選擇general ,則出現一個Debug Info下拉列表框,可供選擇的除錯資訊方式包括:
None:
沒有除錯資訊
Line Numbers Only:
目標檔案或者可執行檔案中只包含全域性和匯出符號以及程式碼行資訊,不包含符號除錯資訊
C7 Compatible:
目標檔案或者可執行檔案中包含行號和所有符號除錯資訊,包括變數名及型別.函式及原型 等
Program Database:
建立一個程式庫(PDB),包括型別資訊和符號除錯資訊。
Program Database for Edit and Continue:
除了上面的功能外,這個選項允許對程式碼進行除錯過程中的修改和繼續執行。
這個選項同時使#pragma設定的優化功能無效

c 選擇Link頁,選中複選框"Generate Debug Info",這個選項將使聯結器把除錯資訊寫進可執行檔案和DLL .如果C/C++頁中設定了Program Database以上的選項,則Link incrementally可以選擇。選中這個選項,將使程式可以在上一次編譯的基礎上被編譯(即增量編譯),而不必每次都從頭開始編譯。

知識點:2.

如果不想看到太多的警告,加入禁止警告選項wd4244 /wd4996 /wd4018

知識點:3.

張老師問你幾個問題:ws2_32.lib wsock32.lib 這兩個庫有什麼差別。我用了 ws2_32.lib  這一個庫,就能連結成功。
還有,為什麼要忽略 libc.lib;msvcrt.lib;libcd.lib;libcmtd.lib;msvcrtd.lib 這些庫呢?是什麼原因。 wsock32.lib 是winsock1.0的庫檔案,ws2_32.lib 是winsock2.0的庫檔案,如果你只用winsock2,只要ws2_32.lib就可以了。

我們使用的是靜態連結庫多執行緒 (libcmt.lib),這樣將一個httpd.exe檔案拷貝到別的電腦上也能執行,不需要msvcrt.lib(msvcm80.dll、msvcp80.dll、msvcr80.dl)l等動態連結庫的支援。libcmt.lib會和msvcrt.lib發生衝突,需要二者選其一。所以,按照微軟MSDN上“連結器工具警告 LNK4098”的說明,忽略了這些庫:


知識點:4.


Libevent 最新的 2.0.10 版本已經支援了Windows 的 IOCP 網路模型。只不過 evhttp 部分還用的是 select。