From a4306450589a730ee76367b3bc7d6b8c532c7b00 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Thu, 26 Feb 2026 08:38:27 +0300 Subject: [PATCH] builder: fix dynamic library loading and cc improvements (fixes #16899) --- examples/dynamic_library_loading/use_library_test.v | 10 ++++++++++ vlib/v/builder/cc.v | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/examples/dynamic_library_loading/use_library_test.v b/examples/dynamic_library_loading/use_library_test.v index a760beb2a..73fb2ebd5 100644 --- a/examples/dynamic_library_loading/use_library_test.v +++ b/examples/dynamic_library_loading/use_library_test.v @@ -45,6 +45,16 @@ fn test_can_compile_and_use_library_with_skip_unused() { os.rm(library_file_name) or {} } +fn test_can_compile_and_use_library_with_prod() { + os.chdir(cfolder) or {} + os.rm(library_file_name) or {} + v_compile('-prod -d no_backtrace -o library -shared modules/library/library.v') + assert os.is_file(library_file_name) + result := v_compile('run use_dl_module.v') + assert result.output.contains('res: 4') + os.rm(library_file_name) or {} +} + fn v_compile(vopts string) os.Result { cmd := '${os.quoted_path(vexe)} -showcc ${vopts}' // dump(cmd) diff --git a/vlib/v/builder/cc.v b/vlib/v/builder/cc.v index 12c5815c9..6d0c55e35 100644 --- a/vlib/v/builder/cc.v +++ b/vlib/v/builder/cc.v @@ -256,6 +256,10 @@ fn (mut v Builder) setup_ccompiler_options(ccompiler string) { if v.pref.parallel_cc { have_flto = false } + if v.pref.is_shared { + // Keep shared libraries away from LTO to avoid runtime loader regressions. + have_flto = false + } if have_flto { optimization_options << '-flto' } @@ -278,6 +282,10 @@ fn (mut v Builder) setup_ccompiler_options(ccompiler string) { if v.pref.parallel_cc { have_flto = false } + if v.pref.is_shared { + // Keep shared libraries away from LTO to avoid runtime loader regressions. + have_flto = false + } if have_flto { optimization_options << '-flto' } @@ -1101,6 +1109,10 @@ fn (mut c Builder) cc_windows_cross() { if c.pref.parallel_cc { have_flto = false } + if c.pref.is_shared { + // Keep shared libraries away from LTO to avoid runtime loader regressions. + have_flto = false + } if have_flto { optimization_options << '-flto' } -- 2.39.5