2011年11月7日 星期一

使用 VC++ 2010 Express 編譯 Chromium Embedded Framework (CEF) @ Windows 7 64-Bit

前一陣子接觸了 Webkit 和 Chromium 後,開始萌生一些小點子,雖然這些點子還滿粗淺的,但還是試看看吧。第一步則是要使用 Chromium Embedded Framework (CEF),並且嘗試編譯一下。


至於什麼是 CEF 呢?簡單說就是一個 library,讓你很容易在視窗程式中使用瀏覽器元件,若是以 mobile app 環境上,大概是 UIWebView @ iOS 和 WebView @ Android 吧。由於打算以免費的編譯環境,因此採用 VC Express 版本,設定上需要小小動一下。


編譯環境:


VC++ 2010 Express
VC++ 2010 Express SP1 
Windows Driver Kit Version 7.1.0


程式碼:


cef_binary_r306_windows.zip (42.0 MB)


設定:



  1. 開啟 cefclient2010.sln 檔

  2. [工具]->[設定]->[專家設定] && [檢視]->[屬性管理]-> 隨便一個 Project -> Debug | Win32 -> Microsoft.Cpp.Win32.user -> VC++ 目錄

    • Include 目錄

      • C:\WinDDK\7600.16385.1\inc\atl71

      • C:\WinDDK\7600.16385.1\inc\mfc42



    • 程式庫目錄

      • C:\WinDDK\7600.16385.1\lib\ATL\i386

      • C:\WinDDK\7600.16385.1\lib\Mfc\i386





  3. 設定 atldef.h 

    • C:\WinDDK\7600.16385.1\inc\atl71\atldef.h

    • 註解 //#error Do not define _SECURE_ATL.



  4. 設定 cefclient 專案

    • 屬性 -> 連結器 -> 輸入 -> 其他相依性 -> 增加 atlthunk.lib 即可




如此一來,即可編譯成功。唯一的缺陷是有警告訊息:


2>atlsd.lib(stdafx.obj) : warning LNK4078: 發現多個 'ATL' 區段有不同的屬性 (40301040)
2>clientplugin.obj : warning LNK4254: 區段 'ATL' (50000040) 以不同的屬性合併到 '.rdata' (40000040)
2>plugin_test.obj : warning LNK4254: 區段 'ATL' (50000040) 以不同的屬性合併到 '.rdata' (40000040)
2>atlsd.lib(atltrace.obj) : warning LNK4254: 區段 'ATL' (50000040) 以不同的屬性合併到 '.rdata' (40000040)
2>atlsd.lib(externs.obj) : warning LNK4254: 區段 'ATL' (50000040) 以不同的屬性合併到 '.rdata' (40000040)
2>atlsd.lib(atldebugapi.obj) : warning LNK4254: 區段 'ATL' (50000040) 以不同的屬性合併到 '.rdata' (40000040)
2>atlsd.lib(atlbase.obj) : warning LNK4254: 區段 'ATL' (50000040) 以不同的屬性合併到 '.rdata' (40000040)
2>atlsd.lib(atlfuncs.obj) : warning LNK4254: 區段 'ATL' (50000040) 以不同的屬性合併到 '.rdata' (40000040)
2>atlsd.lib(stdafx.obj) : warning LNK4254: 區段 'ATL' (50000040) 以不同的屬性合併到 '.rdata' (40000040)
2>atlsd.lib(allocate.obj) : warning LNK4254: 區段 'ATL' (50000040) 以不同的屬性合併到 '.rdata' (40000040)
2>atlsd.lib(atltracemodulemanager.obj) : warning LNK4254: 區段 'ATL' (50000040) 以不同的屬性合併到 '.rdata' (40000040)


雖然網路上有查到相關解法(屬性 -> 一般 -> ATL 用法 -> 選擇"動態連結 ATL"或"靜態連結 ATL"),但測試的情況並沒有完全清除訊息,因此就先不管他了。接著有空慢慢以這個 cefclient2010.sln 當作基底,修改成想要的東西好了 :D


cefclient_win.cpp


沒有留言:

張貼留言