3 回答

TA貢獻1839條經驗 獲得超15個贊
Arlaharen所說的基本上是正確的,只是他省略了解釋您的鏈接器錯誤的部分。首先,您需要在沒有CRT的情況下將應用程序構建為運行時庫。無論如何,您始終應該這樣做,因為它確實簡化了應用程序的分發。如果您不這樣做,那么所有用戶都需要安裝Visual C ++運行時庫,而那些沒有這樣做的用戶將抱怨系統上缺少神秘的DLL ...鏈接所花費的額外數百KB靜態地使用CRT,在以后的支持中您省去了很多麻煩(請相信我-我已經學到了很難的方法?。?/p>
無論如何,要執行此操作,請轉到目標的屬性-> C / C ++->代碼生成->運行時庫,對于您的Release版本,需要將其設置為“多線程”,對于目標版本,則需要將其設置為“多線程調試”您的調試版本。
由于GTEST庫建立在以同樣的方式,你需要確保你鏈接的正確版本的它,否則鏈接器會拉在運行時庫的另一個副本,這是你看到的錯誤(順便說一句,這如果您使用的是MFC,則不會有任何區別)。您需要將gtest構建為Debug和Release模式,并保留兩個副本。然后,在Release版本中鏈接gtest.lib / gtest_main.lib,在Debug版本中鏈接gtestd.lib / gtest_maind.lib。
另外,您需要確保您的應用程序指向存儲gtest頭文件的目錄(在屬性-> C / C ++->常規->其他包含目錄中),但是如果遇到鏈接器錯誤,我認為您已經設法使此部分正確,否則首先會有更多編譯器錯誤需要處理。

TA貢獻1735條經驗 獲得超5個贊
如果不想編寫自己的main()進行測試,則可以使用gtest_main.lib中定義的main()函數,但會在VS2012中收到鏈接器錯誤“必須定義入口點”。在您的測試項目中,將ProjectProperties-> Linker-> System-> SubSystem設置為“ Console”,因為這將強制VS2012查找名為“ main()”的入口點,并在gtest_main.lib中找到它(前提是已鏈接)它正確地)。
- 3 回答
- 0 關注
- 844 瀏覽
添加回答
舉報