很多人在
windows
使用ace
的時候往往會出現以下的
link
錯誤。
why do i get errors while using 'tryentercriticalsection'?
/ace/os.i(2384) : error c2039:
'tryentercriticalsection': is not a member of '`global namespace''
其實這個錯誤不是由於
ace導致的,只是編譯器把這個贓栽倒了
ace上。出現這個錯誤的原因主要是因為一些關鍵巨集定義衝突,一般是
_win32_winnt
,'tryentercriticalsection'
這個函式是
nt4.0
後才出現的函式,如果這個巨集被定義的小於
0x0400
或者沒有定義,那麼就會出現這個錯誤。
所以最簡單的處理方法是在自己的預定義標頭檔案中加入一行。
#if !defined (_win32_winnt)
# define _win32_winnt 0x0400
#endif 其實
ace自己對於巨集的處理是比較嚴謹的,
ace的
config-win32-common.h
中間就有這行定義,所以在一般而言,可以將
ace的標頭檔案包含定義放在在頂部,這樣也可以避免這個編譯錯誤。
預定義標頭檔案是乙個良好的程式設計習慣,你可以將自己的大部分巨集定義,
include
包含的本工程以外的外部
.h檔案。簡言之就是預定義標頭檔案中使用
#include<>
,表示包含工程以外檔案,自己工程內部只使用
#include」」
,表示包含當前工程目錄下的檔案。大部分
c/c++
的程式設計師都有過鏈結和一些預定義衝突錯誤消耗大量的時間,原來我也是如此,但是在掌握預定義標頭檔案方法後,我幾乎沒有為這個問題折磨過。其實
virsual c++
在生產mfc
工程的時候,會自動幫你自動生產乙個預定義標頭檔案
stdafx.h
,只是我們不善利用而已。
其實對於很多編譯器,使用預定義標頭檔案還可以加快編譯速度。
virusal c++
的預定義會生產乙個
pch檔案,基本可以提高編譯速度一倍。
virusal c++
的工程中間有專門的預定義標頭檔案設定。
c++ builder
採用可以採用的編譯巨集(好像是專用的)加快編譯速度。大致的原理是編譯器會在對預定義標頭檔案中包含的檔案進行與處理,在外部檔案沒有發生改動的時候,編譯器可以使用編譯這些檔案生成的中間檔案加快編譯速度。
VC 的鏈結錯誤LINK2001
學習vc 時經常會遇到鏈結錯誤lnk2001,該錯誤非常討厭,因為對於程式設計者來說,最好 改的錯誤莫過於編譯錯誤,而一般說來發生連 接錯誤時,編譯都已通過。產生連線錯誤的原 因非常多,尤其lnk2001錯誤,常常使人不明其所以然。如果不深入地學習和理解vc 要想改正連線錯誤lnk2001非常困難。...
Linux 鏈結檔案link
linux系統鏈結檔案分兩種,一者硬鏈結檔案,二者軟鏈結檔案 兩檔案都可通過命令ln來生成。1.硬鏈結檔案 硬鏈結 hard link,也稱鏈結 就是檔案的乙個或多個檔名。再說白點,所謂鏈結無非是把檔名和計算機檔案系統使用的節點號鏈結起來。因此可以用多個檔名與同乙個檔案進行鏈結,這些檔名可以在同一目...
常見的Link2001錯誤 轉貼
學習vc 時經常會遇到鏈結錯誤lnk2001,該錯誤非常討厭,因為對於程式設計者來說,最好改的錯誤莫過於編譯錯誤,而一般說來發生連線錯誤時,編譯都已通過。產生連線錯誤的原因非常多,尤其lnk2001錯誤,常常使人不明其所以然。如果不深入地學習和理解vc 要想改正連線錯誤lnk2001非常困難。初學者...