0

我目前正試圖實施基於Chromium嵌入式框架(CEF)的軟件。CEF - 使用MDd構建測試

我瞄準的平臺是windows,我使用的是CEF自動構建的最新版本(截至本文發佈之日)。

由於與其他項目兼容性的原因,我需要分別指定運行時庫爲/MDD/MD調試發佈,並決定測試,建造所提供的例子。我也使用了CEF指南中指出的make例程。

爲此,我更改了文件cef_variables.cmake。特別是,我已經改變了CEF_COMPILER_FLAGS_DEBUGCEF_COMPILER_FLAGS_RELEASE

list(APPEND CEF_COMPILER_FLAGS_DEBUG 
    /MDd   # Multithreaded debug runtime 
    /RTC1   # Disable optimizations 
    /Od   # Enable basic run-time checks 
) 
list(APPEND CEF_COMPILER_FLAGS_RELEASE 
    /MD   # Multithreaded release runtime 
    /O2   # Optimize for maximum speed 
    /Ob2   # Inline any suitable function 
    /GF   # Enable string pooling 
) 

默認標誌/MTD/MT

當使用默認的標誌似乎沒有問題,無論是libcef_dll_wrappercefclient項目編譯就好了。

然而,在使用改變標誌的時候,我只能夠建立libcef_dll_wrapper同時建立cefclient引發以下鏈接錯誤

Severity Code Description Project File Line Suppression State 
Error LNK2038 mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in binding_test.obj cefclient D:\Workspace\CEF\build\tests\cefclient\cef_sandbox.lib(at_exit.obj) 

從cmake的命令輸出

-- The C compiler identification is MSVC 19.0.24215.1 
-- The CXX compiler identification is MSVC 19.0.24215.1 
-- Check for working C compiler: D:/Program Files (x86)/Microsoft Visual Studio                                                14.0/VC/bin/cl.exe 
-- Check for working C compiler: D:/Program Files (x86)/Microsoft Visual Studio                                                14.0/VC/bin/cl.exe -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: D:/Program Files (x86)/Microsoft Visual Studi                                                o 14.0/VC/bin/cl.exe 
-- Check for working CXX compiler: D:/Program Files (x86)/Microsoft Visual Studi                                                o 14.0/VC/bin/cl.exe -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Detecting CXX compile features 
-- Detecting CXX compile features - done 
-- *** CEF CONFIGURATION SETTINGS *** 
-- Generator:     Visual Studio 14 2015 
-- Platform:      Windows 
-- Project architecture:   x86 
-- Binary distribution root:  D:/Workspace/CEF 
-- CEF Windows sandbox:   ON 
-- Visual Studio ATL support: ON 
-- Standard libraries:   comctl32.lib;rpcrt4.lib;shlwapi.lib;ws2_32.lib;                                                dbghelp.lib;psapi.lib;version.lib;winmm.lib 
-- Compile defines:    __STDC_CONSTANT_MACROS;__STDC_FORMAT_MACROS;WIN                                                32;_WIN32;_WINDOWS;UNICODE;_UNICODE;WINVER=0x0601;_WIN32_WINNT=0x601;NOMINMAX;WI                                                N32_LEAN_AND_MEAN;_HAS_EXCEPTIONS=0;PSAPI_VERSION=1;CEF_USE_SANDBOX;CEF_USE_ATL 
-- Compile defines (Debug): 
-- Compile defines (Release): NDEBUG;_NDEBUG 
-- C compile flags:    /MP;/Gy;/GR-;/W4;/WX;/wd4100;/wd4127;/wd4244;/w                                                d4481;/wd4512;/wd4701;/wd4702;/wd4996;/Zi 
-- C compile flags (Debug):  /MDd;/RTC1;/Od 
-- C compile flags (Release): /MD;/O2;/Ob2;/GF 
-- C++ compile flags:   /MP;/Gy;/GR-;/W4;/WX;/wd4100;/wd4127;/wd4244;/w                                                d4481;/wd4512;/wd4701;/wd4702;/wd4996;/Zi 
-- C++ compile flags (Debug): /MDd;/RTC1;/Od 
-- C++ compile flags (Release): /MD;/O2;/Ob2;/GF 
-- Exe link flags:    /MANIFEST:NO;/LARGEADDRESSAWARE 
-- Exe link flags (Debug):  /DEBUG 
-- Exe link flags (Release): 
-- Shared link flags: 
-- Shared link flags (Debug): /DEBUG 
-- Shared link flags (Release): 
-- CEF Binary files:    chrome_elf.dll;d3dcompiler_43.dll;d3dcompiler_4                                                7.dll;libcef.dll;libEGL.dll;libGLESv2.dll;natives_blob.bin;snapshot_blob.bin 
-- CEF Resource files:   cef.pak;cef_100_percent.pak;cef_200_percent.pak                                                ;cef_extensions.pak;devtools_resources.pak;icudtl.dat;locales 
-- Configuring done 
-- Generating done 
-- Build files have been written to: D:/Workspace/CEF/build 

我在這裏錯過了什麼?我認爲,如果我改變了宏變量,所有的項目都將使用相同的設置來編譯,從而編譯沒有錯誤。

回答

1

我一直在繼續研究和我發現,當使用自動構建,它採用了官方cef_sandbox.lib,它使用/MTD/MT運行。

我的修復是改變macro_variables並設置USE_SANDBOXOFF。我仍然有一些錯誤,但現在cefclient正確編譯