From 2ea614c8c3753affc9cab18a1ddd95780dacea3c Mon Sep 17 00:00:00 2001 From: Gabriel Kihlman Date: Wed, 3 Dec 2025 11:58:30 +0100 Subject: [PATCH] elfdeps: look for 64 bit library matches first if binary is 64 bit --- internal/elfdeps/elfdeps.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/elfdeps/elfdeps.go b/internal/elfdeps/elfdeps.go index 799b914..c850c0f 100644 --- a/internal/elfdeps/elfdeps.go +++ b/internal/elfdeps/elfdeps.go @@ -16,6 +16,10 @@ var ldconfigRunner = func() ([]byte, error) { return osexec.Command("ldconfig", "-p").Output() } +// are we running a 64 bit binary? this is used when choosing the order +// of library paths to look in (/lib vs /lib64) +var is64bit bool + // getLdmap runs `ldconfig -p` and returns a map of soname -> path. func getLdmap() map[string]string { m := map[string]string{} @@ -152,7 +156,10 @@ func resolveSingleSoname(soname string, rpaths []string, stdDirs []string, ldmap // standard library directories and falling back to parsing `ldconfig -p` output. func resolveSonames(needed []string, rpaths []string) []string { resolved := map[string]string{} - stdDirs := []string{"/lib", "/lib64", "/usr/lib", "/usr/lib64", "/usr/local/lib"} + stdDirs := []string{"/lib", "/usr/lib", "/usr/local/lib"} + if is64bit { + stdDirs = append([]string{"/lib64", "/usr/lib64"}, stdDirs...) + } var ldmap map[string]string for _, soname := range needed { @@ -206,6 +213,8 @@ func GetLibraryDependencies(binary string) ([]string, error) { finalMap[interpPath] = struct{}{} queue = append(queue, interpPath) } + // also check if it is 64 or 32 bit + is64bit = f.Class == elf.ELFCLASS64 } needed, rpaths := parseDynamic(f)