Ensure that libcef.so is loaded first in webview sample

Use --no-as-needed linker flag to make this happen as otherwise it is
still loaded after libc.so (unless LD_PRELOAD is used).
This commit is contained in:
Vadim Zeitlin 2023-09-06 01:31:32 +02:00
parent c0c345a816
commit 9f2fce3859
5 changed files with 29 additions and 37 deletions

View file

@ -2301,10 +2301,14 @@ LOCALE_LINGUAS = ca cs da de el es fi fr hu id it ja nl pl ru sl sv tr uk zh zh_
@COND_DEPS_TRACKING_1@CCC = $(BK_DEPS) $(CC)
@COND_DEPS_TRACKING_0@CXXC = $(CXX)
@COND_DEPS_TRACKING_1@CXXC = $(BK_DEPS) $(CXX)
COND_PLATFORM_MACOSX_1_LIBCEF_FRAMEWORK = \
-F$(top_srcdir)/3rdparty/cef/Release/ -framework Chromium\ Embedded\ \
Framework
@COND_PLATFORM_MACOSX_1@LIBCEF_FRAMEWORK = $(COND_PLATFORM_MACOSX_1_LIBCEF_FRAMEWORK)
COND_PLATFORM_MACOSX_1_LIBCEF_LINK = -F$(top_srcdir)//3rdparty/cef/Release/ \
-framework Chromium\ Embedded\ Framework
@COND_PLATFORM_MACOSX_1@LIBCEF_LINK = $(COND_PLATFORM_MACOSX_1_LIBCEF_LINK)
COND_PLATFORM_UNIX_1_LIBCEF_LINK = -L$(top_srcdir)//3rdparty/cef/Release/ \
-Wl,--no-as-needed -lcef -Wl,--as-needed
@COND_PLATFORM_UNIX_1@LIBCEF_LINK = $(COND_PLATFORM_UNIX_1_LIBCEF_LINK)
@COND_PLATFORM_WIN32_1@LIBCEF_LINK = \
@COND_PLATFORM_WIN32_1@ $(top_srcdir)//3rdparty/cef/Release/libcef/libcef.lib
@COND_USE_PLUGINS_0@PLUGIN_ADV_EXTRALIBS = $(EXTRALIBS_SDL)
@COND_PLATFORM_MACOSX_1@WXMACVERSION_CMD = \
@COND_PLATFORM_MACOSX_1@ -compatibility_version 1.0 -current_version 1.0
@ -11493,9 +11497,6 @@ COND_USE_SOVERSOLARIS_1___webviewchromiumdll___so_symlinks_uninst_cmd = rm -f \
@COND_PLATFORM_UNIX_1@ -L$(top_srcdir)//3rdparty/cef/libcef_dll_wrapper/
@COND_PLATFORM_WIN32_1@__LIBCEF_WRAPPER_PATH_p = \
@COND_PLATFORM_WIN32_1@ -L$(top_srcdir)//3rdparty/cef/libcef_dll_wrapper/Release/
@COND_PLATFORM_MACOSX_1@__LIBCEF_NAME_p =
@COND_PLATFORM_UNIX_1@__LIBCEF_NAME_p = -lcef
@COND_PLATFORM_WIN32_1@__LIBCEF_NAME_p = -llibcef
@COND_PLATFORM_MACOSX_1@__LIBCEF_DLL_WRAPPER_NAME_p = -lcef_dll_wrapper
@COND_PLATFORM_UNIX_1@__LIBCEF_DLL_WRAPPER_NAME_p = -lcef_dll_wrapper
@COND_PLATFORM_WIN32_1@__LIBCEF_DLL_WRAPPER_NAME_p = -llibcef_dll_wrapper
@ -13520,7 +13521,7 @@ distclean: clean
@COND_MONOLITHIC_0_USE_WEBVIEW_1@wxwebview: $(____wxwebview_namedll_DEP) $(____wxwebview_namelib_DEP)
@COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_WEBVIEW_CHROMIUM_1@$(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webviewchromium$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3): $(WEBVIEWCHROMIUMDLL_OBJECTS) $(__wxexpat___depname) $(__wxzlib___depname) $(__wxregex___depname) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla___depname) $(__wxlexilla___depname) $(__coredll___depname) $(__basedll___depname) $(__webviewdll___depname) $(__webviewchromiumdll___win32rc)
@COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_WEBVIEW_CHROMIUM_1@ $(SHARED_LD_CXX) $@ $(WEBVIEWCHROMIUMDLL_OBJECTS) -L$(LIBDIRNAME) -L$(LIBDIRNAME) -L$(LIBDIRNAME) -L$(LIBDIRNAME) $(__webviewchromiumdll___macinstnamecmd) $(__webviewchromiumdll___importlib) $(__webviewchromiumdll___soname_flags) $(WXMACVERSION_CMD) -L$(top_srcdir)//3rdparty/cef/Release/ $(__LIBCEF_WRAPPER_PATH_p) $(LIBCEF_FRAMEWORK) $(LDFLAGS) $(WX_LDFLAGS) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) -lwx_$(PORTNAME)$(WXUNIVNAME)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core-$(WX_RELEASE)$(HOST_SUFFIX) -lwx_base$(WXBASEPORT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) -lwx_$(PORTNAME)$(WXUNIVNAME)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview-$(WX_RELEASE)$(HOST_SUFFIX) $(__LIBCEF_NAME_p) $(__LIBCEF_DLL_WRAPPER_NAME_p) $(LIBS)
@COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_WEBVIEW_CHROMIUM_1@ $(SHARED_LD_CXX) $@ $(WEBVIEWCHROMIUMDLL_OBJECTS) -L$(LIBDIRNAME) -L$(LIBDIRNAME) -L$(LIBDIRNAME) -L$(LIBDIRNAME) $(__webviewchromiumdll___macinstnamecmd) $(__webviewchromiumdll___importlib) $(__webviewchromiumdll___soname_flags) $(WXMACVERSION_CMD) $(__LIBCEF_WRAPPER_PATH_p) $(LIBCEF_LINK) $(LDFLAGS) $(WX_LDFLAGS) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) -lwx_$(PORTNAME)$(WXUNIVNAME)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core-$(WX_RELEASE)$(HOST_SUFFIX) -lwx_base$(WXBASEPORT)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) -lwx_$(PORTNAME)$(WXUNIVNAME)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webview-$(WX_RELEASE)$(HOST_SUFFIX) $(__LIBCEF_DLL_WRAPPER_NAME_p) $(LIBS)
@COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_WEBVIEW_CHROMIUM_1@ $(DYLIB_RPATH_POSTLINK)
@COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_WEBVIEW_CHROMIUM_1@
@COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_WEBVIEW_CHROMIUM_1@ $(__webviewchromiumdll___so_symlinks_cmd)

View file

@ -582,16 +582,18 @@ For example, add "-F pe-i386" here if using 64 bit windres for 32 bit build.
</if>
</set>
<set var="LIBCEF_NAME">
<!-- linker flags needed to link with CEF -->
<set var="LIBCEF_LINK">
<if cond="PLATFORM_WIN32=='1'">
libcef
$(LIBCEF_PATH)libcef/libcef.lib
</if>
<if cond="PLATFORM_MACOSX=='1'">
<!--Unlike Windows/Linux platfomrs, CEF3 won't provide libcef.so library on OS X. -->
<!--Instead, a Framework with related resources is provided. -->
<!-- CEF is a framework and not just a shared library under Mac. -->
-F$(LIBCEF_PATH) -framework Chromium\ Embedded\ Framework
</if>
<if cond="PLATFORM_UNIX=='1'">
cef
<!-- We need to make sure that libcef.so is loaded first. -->
-L$(LIBCEF_PATH) -Wl,--no-as-needed -lcef -Wl,--as-needed
</if>
</set>
@ -607,10 +609,4 @@ For example, add "-F pe-i386" here if using 64 bit windres for 32 bit build.
</if>
</set>
<set var="LIBCEF_FRAMEWORK">
<if cond="PLATFORM_MACOSX=='1'">
-F$(TOP_SRCDIR)3rdparty/cef/Release/ -framework Chromium\ Embedded\ Framework
</if>
</set>
</makefile>

View file

@ -205,11 +205,9 @@
<library>basedll</library>
<library>webviewdll</library>
<include>$(CEF_INCLUDE_DIR)</include>
<lib-path>$(LIBCEF_PATH)</lib-path>
<lib-path>$(LIBCEF_WRAPPER_PATH)</lib-path>
<sys-lib>$(LIBCEF_NAME)</sys-lib>
<sys-lib>$(LIBCEF_DLL_WRAPPER_NAME)</sys-lib>
<ldflags>$(LIBCEF_FRAMEWORK)</ldflags>>
<ldflags>$(LIBCEF_LINK)</ldflags>>
</dll>
<lib id="webviewchromiumlib" template="wx_lib"

View file

@ -78,10 +78,14 @@ WEBVIEW_CHROMIUM_OBJECTS = \
@COND_DEPS_TRACKING_0@CXXC = $(CXX)
@COND_DEPS_TRACKING_1@CXXC = $(BK_DEPS) $(CXX)
COND_PLATFORM_MACOSX_1_LIBCEF_FRAMEWORK = \
-F$(top_srcdir)/3rdparty/cef/Release/ -framework Chromium\ Embedded\ \
Framework
@COND_PLATFORM_MACOSX_1@LIBCEF_FRAMEWORK = $(COND_PLATFORM_MACOSX_1_LIBCEF_FRAMEWORK)
COND_PLATFORM_MACOSX_1_LIBCEF_LINK = -F$(top_srcdir)//3rdparty/cef/Release/ \
-framework Chromium\ Embedded\ Framework
@COND_PLATFORM_MACOSX_1@LIBCEF_LINK = $(COND_PLATFORM_MACOSX_1_LIBCEF_LINK)
COND_PLATFORM_UNIX_1_LIBCEF_LINK = -L$(top_srcdir)//3rdparty/cef/Release/ \
-Wl,--no-as-needed -lcef -Wl,--as-needed
@COND_PLATFORM_UNIX_1@LIBCEF_LINK = $(COND_PLATFORM_UNIX_1_LIBCEF_LINK)
@COND_PLATFORM_WIN32_1@LIBCEF_LINK = \
@COND_PLATFORM_WIN32_1@ $(top_srcdir)//3rdparty/cef/Release/libcef/libcef.lib
@COND_USE_PLUGINS_0@PLUGIN_ADV_EXTRALIBS = $(EXTRALIBS_SDL)
@COND_USE_GUI_0@PORTNAME = base
@COND_USE_GUI_1@PORTNAME = $(TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION)
@ -224,9 +228,6 @@ COND_MONOLITHIC_1___WXLIB_MONO_p = \
@COND_PLATFORM_UNIX_1@ -L$(top_srcdir)//3rdparty/cef/libcef_dll_wrapper/
@COND_PLATFORM_WIN32_1@__LIBCEF_WRAPPER_PATH_p = \
@COND_PLATFORM_WIN32_1@ -L$(top_srcdir)//3rdparty/cef/libcef_dll_wrapper/Release/
@COND_PLATFORM_MACOSX_1@__LIBCEF_NAME_p =
@COND_PLATFORM_UNIX_1@__LIBCEF_NAME_p = -lcef
@COND_PLATFORM_WIN32_1@__LIBCEF_NAME_p = -llibcef
@COND_PLATFORM_MACOSX_1@__LIBCEF_DLL_WRAPPER_NAME_p = -lcef_dll_wrapper
@COND_PLATFORM_UNIX_1@__LIBCEF_DLL_WRAPPER_NAME_p = -lcef_dll_wrapper
@COND_PLATFORM_WIN32_1@__LIBCEF_DLL_WRAPPER_NAME_p = -llibcef_dll_wrapper
@ -300,7 +301,7 @@ data:
done
@COND_PLATFORM_MACOSX_1_USE_WEBVIEW_CHROMIUM_1@webview_chromium_helper$(EXEEXT): $(WEBVIEW_CHROMIUM_HELPER_OBJECTS)
@COND_PLATFORM_MACOSX_1_USE_WEBVIEW_CHROMIUM_1@ $(CXX) -o $@ $(WEBVIEW_CHROMIUM_HELPER_OBJECTS) -L$(top_srcdir)//3rdparty/cef/Release/ $(__LIBCEF_WRAPPER_PATH_p) $(LIBCEF_FRAMEWORK) $(LDFLAGS) $(__LIBCEF_NAME_p) $(__LIBCEF_DLL_WRAPPER_NAME_p) $(LIBS)
@COND_PLATFORM_MACOSX_1_USE_WEBVIEW_CHROMIUM_1@ $(CXX) -o $@ $(WEBVIEW_CHROMIUM_HELPER_OBJECTS) $(__LIBCEF_WRAPPER_PATH_p) $(LIBCEF_LINK) $(LDFLAGS) $(__LIBCEF_DLL_WRAPPER_NAME_p) $(LIBS)
@COND_PLATFORM_MACOSX_1_USE_WEBVIEW_CHROMIUM_1@fix_cef_link:
@COND_PLATFORM_MACOSX_1_USE_WEBVIEW_CHROMIUM_1@ mkdir -p webview_chromium_helper.app
@ -318,7 +319,7 @@ data:
@COND_PLATFORM_MACOSX_1_USE_WEBVIEW_CHROMIUM_1@ cp -f $(top_srcdir)//src/osx/carbon/wxmac.icns webview_chromium_helper.app/Contents/Resources/wxmac.icns
@COND_USE_WEBVIEW_CHROMIUM_1@webview_chromium$(EXEEXT): $(WEBVIEW_CHROMIUM_OBJECTS) $(__webview_chromium___win32rc)
@COND_USE_WEBVIEW_CHROMIUM_1@ $(CXX) -o $@ $(WEBVIEW_CHROMIUM_OBJECTS) -L$(LIBDIRNAME) $(LDFLAGS_GUI) $(SAMPLES_RPATH_FLAG) $(LIBCEF_FRAMEWORK) -Wl,-rpath,. -L$(top_srcdir)//3rdparty/cef/Release/ $(__LIBCEF_WRAPPER_PATH_p) $(LDFLAGS) $(WX_LDFLAGS) -lwx_$(PORTNAME)$(WXUNIVNAME)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webviewchromium-$(WX_RELEASE)$(HOST_SUFFIX) $(__WXLIB_WEBVIEW_p) $(EXTRALIBS_WEBVIEW) $(__WXLIB_STC_p) $(EXTRALIBS_STC) $(__WXLIB_ADV_p) $(PLUGIN_ADV_EXTRALIBS) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__LIBCEF_NAME_p) $(__LIBCEF_DLL_WRAPPER_NAME_p) $(__LIB_SCINTILLA_p) $(__WXLIB_MONO_p) $(__LIB_SCINTILLA_IF_MONO_p_1) $(__LIB_LEXILLA_IF_MONO_p_1) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) $(LIBS)
@COND_USE_WEBVIEW_CHROMIUM_1@ $(CXX) -o $@ $(WEBVIEW_CHROMIUM_OBJECTS) -L$(LIBDIRNAME) $(LDFLAGS_GUI) $(SAMPLES_RPATH_FLAG) -Wl,-rpath,. $(__LIBCEF_WRAPPER_PATH_p) $(LIBCEF_LINK) $(LDFLAGS) $(WX_LDFLAGS) -lwx_$(PORTNAME)$(WXUNIVNAME)u$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_webviewchromium-$(WX_RELEASE)$(HOST_SUFFIX) $(__WXLIB_WEBVIEW_p) $(EXTRALIBS_WEBVIEW) $(__WXLIB_STC_p) $(EXTRALIBS_STC) $(__WXLIB_ADV_p) $(PLUGIN_ADV_EXTRALIBS) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__LIBCEF_DLL_WRAPPER_NAME_p) $(__LIB_SCINTILLA_p) $(__WXLIB_MONO_p) $(__LIB_SCINTILLA_IF_MONO_p_1) $(__LIB_LEXILLA_IF_MONO_p_1) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) $(LIBS)
@COND_USE_WEBVIEW_CHROMIUM_1@ $(__webview_chromium___os2_emxbindcmd)
@COND_PLATFORM_MACOSX_1_USE_WEBVIEW_CHROMIUM_1@webview_chromium.app/Contents/PkgInfo: $(__webview_chromium___depname) $(top_srcdir)/src/osx/carbon/Info.plist.in $(top_srcdir)/src/osx/carbon/wxmac.icns

View file

@ -30,12 +30,10 @@
cef_process_helper.cpp
</sources>
<if cond="OUT_OF_TREE_MAKEFILES=='0' and CEF_INCLUDE_DIR!=''">
<lib-path>$(LIBCEF_PATH)</lib-path>
<lib-path>$(LIBCEF_WRAPPER_PATH)</lib-path>
<include>$(CEF_INCLUDE_DIR)</include>
<sys-lib>$(LIBCEF_NAME)</sys-lib>
<sys-lib>$(LIBCEF_DLL_WRAPPER_NAME)</sys-lib>
<ldflags>$(LIBCEF_FRAMEWORK)</ldflags>
<ldflags>$(LIBCEF_LINK)</ldflags>
</if>
<add-target target="fix_cef_link" type="action"
cond="target and FORMAT=='autoconf' and PLATFORM_MACOSX=='1' and USE_WEBVIEW_CHROMIUM=='1'">
@ -78,14 +76,12 @@
<wx-lib>adv</wx-lib>
<wx-lib>core</wx-lib>
<wx-lib>base</wx-lib>
<ldflags>$(LIBCEF_FRAMEWORK)</ldflags>
<ldflags>-Wl,-rpath,.</ldflags>
<if cond="OUT_OF_TREE_MAKEFILES=='0' and CEF_INCLUDE_DIR!=''">
<lib-path>$(LIBCEF_PATH)</lib-path>
<lib-path>$(LIBCEF_WRAPPER_PATH)</lib-path>
<include>$(CEF_INCLUDE_DIR)</include>
<sys-lib>$(LIBCEF_NAME)</sys-lib>
<sys-lib>$(LIBCEF_DLL_WRAPPER_NAME)</sys-lib>
<ldflags>$(LIBCEF_LINK)</ldflags>
</if>
<win32-res>../sample.rc</win32-res>