跳转至

错误记录

莫名奇妙new、delete关键字相关的错误

  • 在Source里的源文件最好加\#include "config.h",不然很可能报错(但其实这个只是很烦人的垃圾错误报告,但最好还是加)
  • 注意是源文件而不是头文件,注意模块下得有这个(比如Source/WebKit/config.h)

language设置排查

\#include "WebCore/ProcessIdentifier.h"
\#include <wtf/RuntimeApplicationChecks.h>

printf("[NavigatorBase] ::language, cpid=%s(%s), pid=%d, language=%s\n", Process::identifier().loggingString().utf8().data(),
        WTF::processTypeDescription(WTF::processType()).characters(),
        WTF::getCurrentProcessID(), defaultLanguage().utf8().data());

编译Debug

[9212/9212] Linking CXX executable bin\Playwright.exe
FAILED: [code=4294967295] bin/Playwright.exe
C:\Windows\system32\cmd.exe /C "cd . && D:\softwares\miseroot\data\installs\cmake\3.29.9\cmake-3.29.9-windows-x86_64\bin\cmake.exe -E vs_link_exe --intdir=Tools\Playwright\win\CMakeFiles\Playwright.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100261~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100261~1.0\x64\mt.exe --manifests  -- C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo Tools\Playwright\win\CMakeFiles\Playwright.dir\Common.cpp.obj Tools\Playwright\win\CMakeFiles\Playwright.dir\MainWindow.cpp.obj Tools\Playwright\win\CMakeFiles\Playwright.dir\PlaywrightLib.rc.res Tools\Playwright\win\CMakeFiles\Playwright.dir\WebKitBrowserWindow.cpp.obj Tools\Playwright\win\CMakeFiles\Playwright.dir\WinMain.cpp.obj Tools\Playwright\win\CMakeFiles\Playwright.dir\stdafx.cpp.obj  /out:bin\Playwright.exe /implib:lib\Playwright.lib /pdb:bin\Playwright.pdb /version:0.0 /machine:x64 /STACK:8388608 /debug /INCREMENTAL /subsystem:windows  /DEBUG /OPT:NOICF /OPT:REF /INCREMENTAL:NO  "C:\Program Files\LLVM\lib\clang\20\lib\windows\clang_rt.builtins-x86_64.lib"  comctl32.lib  shlwapi.lib  user32.lib  crypt32.lib  lib\WebKit2.lib  lib\WebCore.lib  crypt32.lib  lib\Skia.lib  vcpkg_installed\x64-windows-webkit\debug\lib\libwebpmux.lib  vcpkg_installed\x64-windows-webkit\debug\lib\icudtd.lib  vcpkg_installed\x64-windows-webkit\debug\lib\icuind.lib  vcpkg_installed\x64-windows-webkit\debug\lib\icuucd.lib  DbgHelp.lib  shlwapi.lib  synchronization.lib  winmm.lib  lib\JavaScriptCore.lib  ws2_32.lib  wsock32.lib  lib\libEGL.lib  vcpkg_installed\x64-windows-webkit\debug\lib\jpeg.lib  vcpkg_installed\x64-windows-webkit\debug\lib\libpng16d.lib  vcpkg_installed\x64-windows-webkit\debug\lib\zlibd.lib  vcpkg_installed\x64-windows-webkit\debug\lib\sqlite3.lib  vcpkg_installed\x64-windows-webkit\debug\lib\libxslt.lib  vcpkg_installed\x64-windows-webkit\debug\lib\libxml2.lib  lib\libGLESv2.lib  "C:\Program Files\LLVM\lib\clang\20\lib\windows\clang_rt.builtins-x86_64.lib"  vcpkg_installed\x64-windows-webkit\debug\lib\lcms2.lib  vcpkg_installed\x64-windows-webkit\debug\lib\woff2dec.lib  vcpkg_installed\x64-windows-webkit\debug\lib\libcurl_imp.lib  vcpkg_installed\x64-windows-webkit\debug\lib\psl.lib  vcpkg_installed\x64-windows-webkit\debug\lib\ssl.lib  vcpkg_installed\x64-windows-webkit\debug\lib\crypto.lib  vcpkg_installed\x64-windows-webkit\debug\lib\libwebpdemux.lib  vcpkg_installed\x64-windows-webkit\debug\lib\libwebp.lib  vcpkg_installed\x64-windows-webkit\debug\lib\jxl.lib  vcpkg_installed\x64-windows-webkit\debug\lib\harfbuzz.lib  vcpkg_installed\x64-windows-webkit\debug\lib\harfbuzz-icu.lib  iphlpapi.lib  usp10.lib  vcpkg_installed\x64-windows-webkit\debug\lib\brotlidec.lib  vcpkg_installed\x64-windows-webkit\debug\lib\woff2common.lib  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && C:\Windows\system32\cmd.exe /C "cd /D D:\mwk\WebKitBuild\Debug\Tools\Playwright\win && C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -executionpolicy Bypass -file "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/vcpkg/scripts/buildsystems/msbuild/applocal.ps1" -targetBinary D:/mwk/WebKitBuild/Debug/bin/Playwright.exe -installedDir D:/mwk/WebKitBuild/Debug/vcpkg_installed/x64-windows-webkit/debug/bin -OutVariable out""
LINK: command "C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo Tools\Playwright\win\CMakeFiles\Playwright.dir\Common.cpp.obj Tools\Playwright\win\CMakeFiles\Playwright.dir\MainWindow.cpp.obj Tools\Playwright\win\CMakeFiles\Playwright.dir\PlaywrightLib.rc.res Tools\Playwright\win\CMakeFiles\Playwright.dir\WebKitBrowserWindow.cpp.obj Tools\Playwright\win\CMakeFiles\Playwright.dir\WinMain.cpp.obj Tools\Playwright\win\CMakeFiles\Playwright.dir\stdafx.cpp.obj /out:bin\Playwright.exe /implib:lib\Playwright.lib /pdb:bin\Playwright.pdb /version:0.0 /machine:x64 /STACK:8388608 /debug /INCREMENTAL /subsystem:windows /DEBUG /OPT:NOICF /OPT:REF /INCREMENTAL:NO C:\Program Files\LLVM\lib\clang\20\lib\windows\clang_rt.builtins-x86_64.lib comctl32.lib shlwapi.lib user32.lib crypt32.lib lib\WebKit2.lib lib\WebCore.lib crypt32.lib lib\Skia.lib vcpkg_installed\x64-windows-webkit\debug\lib\libwebpmux.lib vcpkg_installed\x64-windows-webkit\debug\lib\icudtd.lib vcpkg_installed\x64-windows-webkit\debug\lib\icuind.lib vcpkg_installed\x64-windows-webkit\debug\lib\icuucd.lib DbgHelp.lib shlwapi.lib synchronization.lib winmm.lib lib\JavaScriptCore.lib ws2_32.lib wsock32.lib lib\libEGL.lib vcpkg_installed\x64-windows-webkit\debug\lib\jpeg.lib vcpkg_installed\x64-windows-webkit\debug\lib\libpng16d.lib vcpkg_installed\x64-windows-webkit\debug\lib\zlibd.lib vcpkg_installed\x64-windows-webkit\debug\lib\sqlite3.lib vcpkg_installed\x64-windows-webkit\debug\lib\libxslt.lib vcpkg_installed\x64-windows-webkit\debug\lib\libxml2.lib lib\libGLESv2.lib C:\Program Files\LLVM\lib\clang\20\lib\windows\clang_rt.builtins-x86_64.lib vcpkg_installed\x64-windows-webkit\debug\lib\lcms2.lib vcpkg_installed\x64-windows-webkit\debug\lib\woff2dec.lib vcpkg_installed\x64-windows-webkit\debug\lib\libcurl_imp.lib vcpkg_installed\x64-windows-webkit\debug\lib\psl.lib vcpkg_installed\x64-windows-webkit\debug\lib\ssl.lib vcpkg_installed\x64-windows-webkit\debug\lib\crypto.lib vcpkg_installed\x64-windows-webkit\debug\lib\libwebpdemux.lib vcpkg_installed\x64-windows-webkit\debug\lib\libwebp.lib vcpkg_installed\x64-windows-webkit\debug\lib\jxl.lib vcpkg_installed\x64-windows-webkit\debug\lib\harfbuzz.lib vcpkg_installed\x64-windows-webkit\debug\lib\harfbuzz-icu.lib iphlpapi.lib usp10.lib vcpkg_installed\x64-windows-webkit\debug\lib\brotlidec.lib vcpkg_installed\x64-windows-webkit\debug\lib\woff2common.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST:EMBED,ID=1" failed (exit code 1) with the following output:
lld-link: error: undefined symbol: private: static bool WTF::RefCountDebugger::areThreadingChecksEnabledGlobally
>>> referenced by D:\mwk\WebKitBuild\Debug\WTF\Headers\wtf\RefCountDebugger.h:123
>>>               Tools\Playwright\win\CMakeFiles\Playwright.dir\WebKitBrowserWindow.cpp.obj:(public: void __cdecl WTF::RefCountDebugger::applyRefDerefThreadingCheck(unsigned int, enum WTF::RefCountIsThreadSafe) const)
>>> referenced by Tools\Playwright\win\CMakeFiles\Playwright.dir\WinMain.cpp.obj

lld-link: error: undefined symbol: public: static class WTF::StringImpl::StaticStringImpl WTF::StringImpl::s_emptyAtomString
>>> referenced by D:\mwk\WebKitBuild\Debug\WTF\Headers\wtf\text\StringImpl.h:416
>>>               Tools\Playwright\win\CMakeFiles\Playwright.dir\WinMain.cpp.obj:(public: static class WTF::StringImpl * __cdecl WTF::StringImpl::empty(void))
ninja: build stopped: subcommand failed.

解决方法

Tools\Playwright\win\CMakeLists.txt

## WTF and bmalloc symbols live in JavaScriptCore.dll on Windows.  The
## STATICALLY_LINKED_WITH_WTF / STATICALLY_LINKED_WITH_bmalloc definitions
## propagated by WebKit::WTF cause WTF_EXPORT_PRIVATE to expand to
## __declspec(dllexport) instead of __declspec(dllimport), which prevents
## lld-link from resolving the symbols via the JavaScriptCore import library.
## Override them here so the correct dllimport decoration is used.
target_compile_options(Playwright PRIVATE -USTATICALLY_LINKED_WITH_WTF -USTATICALLY_LINKED_WITH_bmalloc)

clangd.exe --check=D:\mwk\Tools\Playwright\win\WinMain.cpp

在CompileFlags Add添加 "/clang:-std=c++23", # clangd drops /std:c++latest from clang-cl driver, workaround pass-through to cc1 后,解决了许多std::span/concept/byte 等cpp版本错误