build(win): make the mingw cross-compile link and find librustzcash
Three things broke the x86_64-w64-mingw32 build; two are real and fixed here (the third was a stale-object contamination from building Linux and Windows in the same tree, resolved by a clean rebuild — not a code fix). 1. Single-pass mingw ld could not resolve the cross-references DragonX added between the internal static archives (libbitcoin_util/common objects pulling in UniValue; util<->common mutual deps). GNU ld on Linux re-scans archives so it never surfaced; ld64 on macOS rejects the grouping flag outright. Bracket each binary's _LDADD in -Wl,--start-group/--end-group, delivered via AC_SUBST(LINK_GROUP_*) so automake does not reject the linker flag inside _LDADD, and left empty on every non-Windows target. 2. The Rust build emits the mingw archive as rustzcash.lib, but the link line asks for -lrustzcash, i.e. librustzcash.a. Normalize the staged filename to librustzcash.a for every host (a no-op on Linux/macOS, where the basename was already librustzcash.a). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
16
configure.ac
16
configure.ac
@@ -833,6 +833,22 @@ AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
|
||||
AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
|
||||
AM_CONDITIONAL([TARGET_LINUX], [test x$TARGET_OS = xlinux])
|
||||
AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
|
||||
|
||||
dnl mingw ld is single-pass: bracket the internal static archives in a link group
|
||||
dnl so it re-scans and resolves the cross-references DragonX added between them
|
||||
dnl (libbitcoin_util/common objects using UniValue; util<->common mutual deps).
|
||||
dnl Delivered via AC_SUBST (not an automake conditional) so automake does not
|
||||
dnl reject the linker flags inside _LDADD. Empty elsewhere (macOS ld64 rejects the
|
||||
dnl flag; GNU ld on Linux re-scans archives already).
|
||||
if test "x$TARGET_OS" = "xwindows"; then
|
||||
LINK_GROUP_START="-Wl,--start-group"
|
||||
LINK_GROUP_END="-Wl,--end-group"
|
||||
else
|
||||
LINK_GROUP_START=""
|
||||
LINK_GROUP_END=""
|
||||
fi
|
||||
AC_SUBST(LINK_GROUP_START)
|
||||
AC_SUBST(LINK_GROUP_END)
|
||||
AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
|
||||
AM_CONDITIONAL([ENABLE_MINING],[test x$enable_mining = xyes])
|
||||
AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
|
||||
|
||||
Reference in New Issue
Block a user