fix: cgo: include dynamic library when interface library is set (#4569)
On Linux, some packages provide a linker script as the interface library
(e.g. a bare `libfoo.so` containing `GROUP(...)`). The script references
the actual versioned dynamic library, which must also be present in the
sandbox for the linker to resolve it.
diff --git a/go/private/rules/cgo.bzl b/go/private/rules/cgo.bzl
index 1c48d02..eb458da 100644
--- a/go/private/rules/cgo.bzl
+++ b/go/private/rules/cgo.bzl
@@ -198,6 +198,12 @@
libs.append(library_to_link.pic_static_library)
elif library_to_link.interface_library != None:
libs.append(library_to_link.interface_library)
+ if library_to_link.dynamic_library != None:
+ # On Linux, the interface library may be a linker script (e.g.
+ # "libfoo.so" containing GROUP(...)) that references the actual
+ # versioned dynamic library. The dynamic library must also be in
+ # the sandbox so the linker can resolve it.
+ libs.append(library_to_link.dynamic_library)
elif library_to_link.dynamic_library != None:
libs.append(library_to_link.dynamic_library)
return libs, flags