天天看點

殘缺的dsw

   上班第二周了,查bug,編版本。或許是以前在防毒軟體公司工作過的原因吧,産品經理沒有給我傳說中的三個月“幸福的試用期”,這不,一個殘缺的dsw工程扔了過來,要我盡快編譯通過……當然,這種費力,費時,經常摸不到頭腦還展現不出的工作成績的活由現在的我來做豈不再合适不過了,不過我心裡沒有抱怨,骨頭自有骨頭的營養!

    殘缺的dsw!!至于殘到什麼程度,那要看修理人的“醫術”了。打開dsw,羅列于IDE workspace的十個工程有四家缺席。毫無疑問,第一項任務---搜捕!ctrl+F,一通忙活後一無所獲,幾分鐘後郵件傳來的負責人的解釋:由于"JournTransler"被簡寫為"JT",固無法找到。I  GO!!這種“殘”法也太意外了吧~

    接下來把dsw需要的工程補齊,可以建立一個workspace重新組織所有---涉及環境設定的太多,放棄。可以用IDE單獨選中添加,這種比較傻瓜化。我選了以前沒用過的修改dsp檔案的方法。用notepad打開dsp,一個曾經親切的面孔呈現出來---多像Linux下的Makefile啊,在此,可以看到使用的編譯器cl.exe, rc.exe,vc中設定的各個選項"/MD... ADD xxx.lib  ../.../",檔案依賴關系……vc的setting dlg雖說直覺,但總感覺多的零亂,用dsp一并列出,倒也簡潔明了!修改就很簡單了,把JournTransler替換成JT,主要涉及工程名,關聯的dsp名和輸出路徑。

    編譯過程比較折磨人,衆多的lib沖突(如:nafxcwd.lib, libcmtd.lib)通常會在Link是表現出Link2005的錯誤提示。解決方法主要兩點:一,保證c/c++ ---  category(code  generation) ---  Use run-time library的設定主副工程一緻(比如都是 Debug MultiThread),此處是要告訴linker使用什麼版本的c标準程式庫,不同的設定(如 /MT  ,/MD)常會導緻對應lib(libcmt.lib,msvcrt.lib)的沖突;二,link中要正确設定lib的加載順序(關于lib的加載順序可以在project option末尾添加/verbose:lib,compile時便可看到 ),這是由于vc的linker會對obj檔案中的強弱符号按規則(強唯一,強弱并存選強,全弱任選--這裡應該是選靠前找到的)處理,crt中對new,delete,dllmain使用弱連接配接處理,設定lib的加載次序會nafxcwd.lib與libcmtd.lib的沖突問題,設定方法是:先忽略nafxcwd.lib與libcmtd.lib,而後再在link的libaray/module object中按序輸入nafxcwd.lib,libcmtd.lib。

    編譯中還經常出現 can't find symbol [email protected]現象,  查找(工程中過濾器記得用*.*)到其所在的lib添加到工程即可。對于can't find xxx.h之類的錯誤,不必将整個路徑寫入,c/c++  ---  category(Preprofessor)  ---  Additional included directories加入頭檔案所在的檔案夾相對路徑可解決。

    工程通過編譯了九個,在exe沒通過測試前還不能放松,修補工作還在繼續……

繼續閱讀