When compiling Blink bindings for media mojo interfaces on Windows component builds, we get the following link errors:
[17117/18798] LINK(DLL) blink_platform.dll blink_platform.dll.lib blink_platform.dll.pdb
FAILED: blink_platform.dll blink_platform.dll.lib blink_platform.dll.pdb
ninja -t msvc -e environment.x86 -- ../../third_party/llvm-build/Release+Asserts/bin/lld-link.exe /nologo /IMPLIB:./blink_platform.dll.lib /DLL /OUT:./blink_platform.dll /PDB:./blink_platform.dll.pdb @./blink_platform.dll.rsp
lld-link: error: obj/media/mojo/interfaces/interfaces_blink/content_decryption_module.mojom-blink.obj: locally defined symbol imported: "private: class blink::SecurityOrigin const * __thiscall blink::SecurityOrigin::GetOriginOrPrecursorOriginIfOpaque(void) const" (?GetOriginOrPrecursorOriginIfOpaque@SecurityOrigin@blink@@ABEPBV12@XZ) (defined in obj/third_party/blink/renderer/platform/platform/security_origin.obj) [LNK4217]
lld-link: error: obj/media/mojo/interfaces/interfaces_blink/content_decryption_module.mojom-blink.obj: locally defined symbol imported: "private: class base::Optional<class base::UnguessableToken> __thiscall blink::SecurityOrigin::GetNonceForSerialization(void) const" (?GetNonceForSerialization@SecurityOrigin@blink@@ABE?AV?$Optional@VUnguessableToken@base@@@base@@XZ) (defined in obj/third_party/blink/renderer/platform/platform/security_origin.obj) [LNK4217]
lld-link: error: obj/media/mojo/interfaces/interfaces_blink/content_decryption_module.mojom-blink.obj: locally defined symbol imported: "public: static class scoped_refptr<class blink::SecurityOrigin> __cdecl blink::SecurityOrigin::Create(class WTF::String const &, class WTF::String const &, unsigned short)" (?Create@SecurityOrigin@blink@@SA?AV?$scoped_refptr@VSecurityOrigin@blink@@@@ABVString@WTF@@0G@Z) (defined in obj/third_party/blink/renderer/platform/platform/security_origin.obj) [LNK4217]
lld-link: error: obj/media/mojo/interfaces/interfaces_blink/content_decryption_module.mojom-blink.obj: locally defined symbol imported: "private: static class scoped_refptr<class blink::SecurityOrigin> __cdecl blink::SecurityOrigin::CreateOpaque(class url::Origin::Nonce const &, class blink::SecurityOrigin const *)" (?CreateOpaque@SecurityOrigin@blink@@CA?AV?$scoped_refptr@VSecurityOrigin@blink@@@@ABVNonce@Origin@url@@PBV12@@Z) (defined in obj/third_party/blink/renderer/platform/platform/security_origin.obj) [LNK4217]
lld-link: error: obj/media/mojo/interfaces/interfaces_blink/renderer.mojom-blink.obj: locally defined symbol imported: "public: __thiscall blink::KURL::~KURL(void)" (??1KURL@blink@@QAE@XZ) (defined in obj/third_party/blink/renderer/platform/platform/kurl.obj) [LNK4217]
lld-link: error: obj/media/mojo/interfaces/interfaces_blink/renderer.mojom-blink.obj: locally defined symbol imported: "public: bool __thiscall blink::KURL::IsValid(void) const" (?IsValid@KURL@blink@@QBE_NXZ) (defined in obj/third_party/blink/renderer/platform/platform/kurl.obj) [LNK4217]
lld-link: error: obj/media/mojo/interfaces/interfaces_blink/renderer.mojom-blink.obj: locally defined symbol imported: "public: __thiscall blink::KURL::KURL(void)" (??0KURL@blink@@QAE@XZ) (defined in obj/third_party/blink/renderer/platform/platform/kurl.obj) [LNK4217]
lld-link: error: obj/media/mojo/interfaces/interfaces_blink/renderer.mojom-blink.obj: locally defined symbol imported: "public: __thiscall blink::KURL::KURL(class blink::KURL const &, class WTF::String const &)" (??0KURL@blink@@QAE@ABV01@ABVString@WTF@@@Z) (defined in obj/third_party/blink/renderer/platform/platform/kurl.obj) [LNK4217]
lld-link: error: obj/media/mojo/interfaces/interfaces_blink/renderer.mojom-blink.obj: locally defined symbol imported: "public: class blink::KURL & __thiscall blink::KURL::operator=(class blink::KURL const &)" (??4KURL@blink@@QAEAAV01@ABV01@@Z) (defined in obj/third_party/blink/renderer/platform/platform/kurl.obj) [LNK4217]
To work around this, we added the following to the mojom entry in media/mojo/interfaces/BUILD.gn, which removes the link error:
if (is_win && is_component_build) {
export_class_attribute_blink = "PLATFORM_EXPORT"
export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1"
export_header_blink = "third_party/blink/public/platform/web_common.h"
}
The error messages point to some bug in URL related classes.
Bug 764823 also tracks link errors related to URL classes in Windows component builds, which suggests that some fixing of the URL classes might be needed.
Comment 1 by guidou@chromium.org
, Jan 11