如果通过 glibc 或 musl 静态链接,则查找 haskell 可执行文件
Finding haskell executable if statically linked via glibc or musl
我有一个通过 ghc 构建的可执行文件,我知道它是静态编译的。我想知道它是通过 glibc 还是基于 musl 的静态链接(主要是因为不鼓励基于 glibc 的静态链接:)
我也对一个答案感兴趣,看看是否有适用于任何可执行文件的 非 Haskell 解决方案(基本上是不发货的可执行文件使用 Haskell 的 RTS)。
虽然它仅限于基于 haskell 的可执行文件,但找到它的一种方法是使用 --info
选项:
示例:
$ ./tldr +RTS --info -RTS
[("GHC RTS", "YES")
,("GHC version", "8.6.5")
,("RTS way", "rts_thr")
,("Build platform", "x86_64-alpine-linux")
,("Build architecture", "x86_64")
,("Build OS", "linux")
,("Build vendor", "alpine")
,("Host platform", "x86_64-alpine-linux")
,("Host architecture", "x86_64")
,("Host OS", "linux")
,("Host vendor", "alpine")
,("Target platform", "x86_64-alpine-linux")
,("Target architecture", "x86_64")
,("Target OS", "linux")
,("Target vendor", "alpine")
,("Word size", "64")
,("Compiler unregisterised", "NO")
,("Tables next to code", "YES")
]
从 x86_64-apline-linux
,我可以确认该构建是基于 Alpine Linux,它基于 musl。您可以通过 ldd
明确确认它确实是静态链接的:
$ ldd ./tldr
not a dynamic executable
nm
命令列出目标文件中的符号名称。如果这些还没有从您的可执行文件中删除,您可以:
nm
你的可执行文件
nm
glibc
和 musl
比较列表以找到匹配的符号。 comm
命令可以帮助解决这个问题。
来自Get list of static libraries used in an executable
我有一个通过 ghc 构建的可执行文件,我知道它是静态编译的。我想知道它是通过 glibc 还是基于 musl 的静态链接(主要是因为不鼓励基于 glibc 的静态链接:
我也对一个答案感兴趣,看看是否有适用于任何可执行文件的 非 Haskell 解决方案(基本上是不发货的可执行文件使用 Haskell 的 RTS)。
虽然它仅限于基于 haskell 的可执行文件,但找到它的一种方法是使用 --info
选项:
示例:
$ ./tldr +RTS --info -RTS
[("GHC RTS", "YES")
,("GHC version", "8.6.5")
,("RTS way", "rts_thr")
,("Build platform", "x86_64-alpine-linux")
,("Build architecture", "x86_64")
,("Build OS", "linux")
,("Build vendor", "alpine")
,("Host platform", "x86_64-alpine-linux")
,("Host architecture", "x86_64")
,("Host OS", "linux")
,("Host vendor", "alpine")
,("Target platform", "x86_64-alpine-linux")
,("Target architecture", "x86_64")
,("Target OS", "linux")
,("Target vendor", "alpine")
,("Word size", "64")
,("Compiler unregisterised", "NO")
,("Tables next to code", "YES")
]
从 x86_64-apline-linux
,我可以确认该构建是基于 Alpine Linux,它基于 musl。您可以通过 ldd
明确确认它确实是静态链接的:
$ ldd ./tldr
not a dynamic executable
nm
命令列出目标文件中的符号名称。如果这些还没有从您的可执行文件中删除,您可以:
nm
你的可执行文件nm
glibc
和musl
比较列表以找到匹配的符号。
comm
命令可以帮助解决这个问题。
来自Get list of static libraries used in an executable