I'm investigating binary size of compiled v8. I found that when using v8_monolith all source files are built with fvisibility=default. This is the correct option for embedders using dlopen (eg nodejs), but not for embedders using v8 without dynamically-loaded native code.
I tracked this decision back to:
I'm pretty surprised this condition has existed since 2018. I think the default should be hidden visibility for embedders, and those who use dlopen would add another flag to get those public symbols. Otherwise we're potentially doubling the binary size for embedders and the only recourse is patching v8's build.