Commit e2837db
Update LibrariesToLinkCollector.java for .dll suffix stripping
Fixes #19696
Allow automatic linkage of DLL libraries when GNU toolchain used in Windows. .dll suffix has to be stripped before passing library name to `ld.exe` with `-l` option.
This [case](https://github.com/vvviktor/bazel_sandbox.git) was successfully tested :
Workspace structure:
```
D:.
│ .bazelrc
│ BUILD
│ MODULE.bazel
│ MODULE.bazel.lock
│ WORKSPACE
│
├───Main
│ BUILD
│ main.cpp
│ math.cpp
│ math.h
│ math_dll_interface.cpp
│ math_dll_interface.h
│ math_import_defs.h
│
└───toolchain
BUILD
toolchain_config.bzl
```
BUILD file:
```
# //Main/BUILD
DLL_HDRS = ["math_import_defs.h", "math_dll_interface.h"]
cc_binary(
name = "sum_numbers_mingw",
srcs = ["main.cpp"],
deps = [":math_d_shared"]
)
cc_import(
name = "math_d_shared",
hdrs = DLL_HDRS,
shared_library = ":libmath_d.dll"
)
cc_binary(
name = "libmath_d.dll",
srcs = ["math_dll_interface.cpp"] + DLL_HDRS,
deps = [":math"],
defines = ["MATH_DLL"],
linkshared = 1
)
cc_library(
name = "math",
srcs = ["math.cpp"],
hdrs = ["math.h"],
copts = ["-std=c++17"]
)
```
Without patch applied `bazel build //main:sum_numbers_mingw --verbose_failures` fails with error:
`C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lmath_d.dll: No such file or directory`
Then after patch was applied it builds all targets as expected.
This approach also works fine with patch applied:
```
# //Main/BUILD
DLL_HDRS = ["math_import_defs.h", "math_dll_interface.h"]
cc_binary(
name = "sum_numbers_mingw",
srcs = ["main.cpp"] + DLL_HDRS,
dynamic_deps = [":math_d_shared"]
)
cc_shared_library(
name = "math_d_shared",
shared_lib_name = "libmath_d.dll",
deps = [":math_dll_interface"]
)
cc_library(
name = "math_dll_interface",
srcs = ["math_dll_interface.cpp"],
hdrs = DLL_HDRS,
deps = [":math"],
defines = ["MATH_DLL"]
)
cc_library(
name = "math",
srcs = ["math.cpp"],
hdrs = ["math.h"],
copts = ["-std=c++17"]
)
```
Closes #21404.
PiperOrigin-RevId: 611401823
Change-Id: I98fbfb245acdd2dac41d6a56b5f74059dc53a0821 parent 42611f9 commit e2837db
1 file changed
Lines changed: 3 additions & 2 deletions
Lines changed: 3 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
605 | 605 | | |
606 | 606 | | |
607 | 607 | | |
608 | | - | |
| 608 | + | |
| 609 | + | |
609 | 610 | | |
610 | | - | |
| 611 | + | |
611 | 612 | | |
612 | 613 | | |
613 | 614 | | |
| |||
0 commit comments