Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[brotli] build failure when used with cargo-vcpkg #16991

Closed
waych opened this issue Mar 31, 2021 · 1 comment
Closed

[brotli] build failure when used with cargo-vcpkg #16991

waych opened this issue Mar 31, 2021 · 1 comment
Assignees
Labels
category:port-bug The issue is with a library, which is something the port should already support depends:upstream-changes Waiting on a change to the upstream project

Comments

@waych
Copy link

waych commented Mar 31, 2021

Host Environment

  • OS: debian, ubuntu-latest
  • Compiler: rust toolchain nightly 1.53 + gcc 10.2.1 + ld.bfd 2.35.2

To Reproduce
Steps to reproduce the behavior:

git clone https://github.com/Rust-SDL2/rust-sdl2.git
cd rust-sdl2
cargo install cargo-vcpkg
cargo vcpkg -v build
cargo build --examples --features "use-vcpkg static-link gfx image ttf mixer"

Failure logs
cargo vcpkg -v build succeeds without error. The cargo build ... command fails on final link however with the following:

  = note: /usr/bin/ld: /home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib/libbrotlidec-static.a(decode.c.o): in function `DecodeLiteralB
lockSwitch':
          decode.c:(.text+0x863): undefined reference to `_kBrotliPrefixCodeRanges'
          /usr/bin/ld: decode.c:(.text+0x94f): undefined reference to `_kBrotliContextLookupTable'
          /usr/bin/ld: /home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib/libbrotlidec-static.a(decode.c.o): in function `DecodeCommandBlockSwitch':
          decode.c:(.text+0xa7b): undefined reference to `_kBrotliPrefixCodeRanges'
          /usr/bin/ld: /home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib/libbrotlidec-static.a(decode.c.o): in function `DecodeDistanceBlockSwitch':
          decode.c:(.text+0xc3b): undefined reference to `_kBrotliPrefixCodeRanges'
          /usr/bin/ld: /home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib/libbrotlidec-static.a(decode.c.o): in function `ProcessCommands':
          decode.c:(.text+0x2319): undefined reference to `BrotliTransformDictionaryWord'
          /usr/bin/ld: /home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib/libbrotlidec-static.a(decode.c.o): in function `SafeDecodeLiteralBlockSwitch':
          decode.c:(.text+0x2b62): undefined reference to `_kBrotliPrefixCodeRanges'
          /usr/bin/ld: decode.c:(.text+0x2c93): undefined reference to `_kBrotliContextLookupTable'
          /usr/bin/ld: /home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib/libbrotlidec-static.a(decode.c.o): in function `SafeDecodeCommandBlockSwitch':
          decode.c:(.text+0x2f49): undefined reference to `_kBrotliPrefixCodeRanges'
          /usr/bin/ld: /home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib/libbrotlidec-static.a(decode.c.o): in function `SafeDecodeDistanceBlockSwitch':
          decode.c:(.text+0x32e9): undefined reference to `_kBrotliPrefixCodeRanges'
          /usr/bin/ld: /home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib/libbrotlidec-static.a(decode.c.o): in function `SafeProcessCommands':
          decode.c:(.text+0x3ad9): undefined reference to `BrotliTransformDictionaryWord'
          /usr/bin/ld: /home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib/libbrotlidec-static.a(decode.c.o): in function `BrotliDecoderDecompressStream':
          decode.c:(.text+0x5205): undefined reference to `_kBrotliPrefixCodeRanges'
          /usr/bin/ld: decode.c:(.text+0x5594): undefined reference to `_kBrotliContextLookupTable'
          /usr/bin/ld: /home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib/libbrotlidec-static.a(state.c.o): in function `BrotliDecoderStateInit':
          state.c:(.text+0xe9): undefined reference to `BrotliGetDictionary'
          /usr/bin/ld: state.c:(.text+0xf5): undefined reference to `BrotliGetTransforms'
          /usr/bin/ld: state.c:(.text+0x114): undefined reference to `BrotliDefaultAllocFunc'
          /usr/bin/ld: state.c:(.text+0x123): undefined reference to `BrotliDefaultFreeFunc'
          collect2: error: ld returned 1 exit status

The failing link command is:

  = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-Wl,--eh-frame-hdr" "-L" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x87_64-unknown-linux-gnu/lib" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.11stxf74krh57yas.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.143k41o74brp4jzi.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.1aendcv100r57n20.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.1cs9e3zb3afmoslj.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.1h84b58ekutvqyxo.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.1js9tzp3qu0fhfg2.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.1ll2oyn5sc4zrr97.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.1n1yt1tc7prlk1e9.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.1tmfux48ef0evry2.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.22r2edyzppjuwpsh.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.22y6p6pzkfvtg3bp.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.24ffx2yosbxrvs8x.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.27896q1nad1bh5ty.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.27hg1sbgwc551bhm.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.28cazfrtcxkx6mzq.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.2b6s0qydp050ere7.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.2ibl2ri80o7z49i0.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.2m9ehss7c3b6fdpz.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.2qg8mgevx1ipwke2.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.2qno3mpegs560n57.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.2s51d4rlf102hy8z.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.2x1ar5p0ge3v3ne5.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.2z3p34l56h0kbyyg.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.30xj999jwrc0kvvd.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.34q6n77npnc005tm.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.35ddl9dypccdr50q.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.39l9wlcgyu7mi5b.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.3agwo9aldriuc2vj.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.3djjpjesh3vl9sg4.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.3eeuqbzie0g9orkv.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.3fyqyuk7s9jjutkr.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.3jl0zqua37sjkufz.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.3quy3ccg9h5e0i1q.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.3sx2op9iakmfa2mf.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.3tfddsi98i6s6yqr.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.3xtpuiu3adjyou4d.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.40cqxntzs64mp7j7.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.40t5iqumhpcvfwjc.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.42150r45awoziwqy.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.43idh19dw2v8b810.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.43n6avdh7vcie2mx.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.43y8s8qvy5kx8ns9.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.47bes090kme7va1j.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.47xut5phsa83u601.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4bka2ttww8kfsz6i.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4ev7xe651iypl2s7.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4f6xm81mi785nafb.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4geh6ntzusa7ib1u.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4igcl1wbc3a69mtg.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4jtwicz6c5qoutm.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4l1lb1bk40ynyq94.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4lgspn8f2tf6lpg2.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4p8ho8q137700mj6.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4ph06ttnfl7zcp59.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4q4pucqa1i1xvau4.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4qrjcfyrcsbrqieb.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4s1udjr4n0a2n452.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4uwndx70wao82a65.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.4zfove6z1gm2vk4w.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.53ltpena3cjmiwj0.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.59l596136l8idpio.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.59lm1twcv4eqs857.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.5baqjbo2ogftnckm.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.5bx0wrzffwaefn18.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.5g0isa7c2h9sfzwe.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.5g6vnbl1nopkudhw.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.6qdpyg5b68reon3.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.79i7ju9h3ir0u07.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.cg5ol14aq6hc8q.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.fge6s1691ajg2sa.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.hbuxaripgg4s2cx.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.idzrtjab42u72d.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.mnoki3xllh493jt.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.ncfcx4rglpsztla.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.oid89ilca6nf87y.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.op60vsco0o4op35.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.ru918fvlmtf5tl7.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.t8n8xq0t6f2ploj.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.verrs7mrb7a2vba.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.y940mmo2x3u9or9.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.zfgo4zm56qb9o6n.rcgu.o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.zk2wnmls94grhe9.rcgu.o" "-o" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/examples/resource_manager-4685aafab669563d.13szka7xjm9bnoj.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/deps" "-L" "/home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib" "-L" "/home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib" "-L" "/home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib" "-L" "/home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib" "-L" "/home/runner/work/rust-sdl2/rust-sdl2/target/vcpkg/installed/x64-linux/lib" "-L" "/usr/lib/x86_64-linux-gnu" "-L" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/deps/libsdl2-d89d5cc16d9ccd3e.rlib" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/deps/libc_vec-e4a116aa5fb77c36.rlib" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/deps/libsdl2_sys-62c64ea189430ed3.rlib" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/deps/libbitflags-f14a0d5eed0a3c48.rlib" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/deps/liblazy_static-4445ce03c8114467.rlib" "/home/runner/work/rust-sdl2/rust-sdl2/target/debug/deps/liblibc-7b26cf09c29c6444.rlib" "-Wl,--start-group" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-6f77337c1826707d.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-e238540f8faf9927.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-78f8506dd5004913.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler-c0e64497deb085aa.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-217a514dc8d845c6.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-65e4f8df4b8bbd73.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-fec1b74170245419.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-e74f867eb2f15322.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-72a374d36f3d0a31.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-cb9206ed96de54c3.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-33ee81149d314805.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-2e8740599b11634b.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-241cf59851357bea.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-edc29aa8c04b480f.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-6a141406945fda5a.rlib" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-2408224b4af46d83.rlib" "-Wl,--end-group" "/usr/share/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-d36087076e1dd756.rlib" "-Wl,-Bdynamic" "-lSDL2_image" "-ltiff" "-ltiffxx" "-llzma" "-ljpeg" "-lturbojpeg" "-lwebp" "-lwebpdecoder" "-lwebpdemux" "-lwebpmux" "-lSDL2_ttf" "-lfreetype" "-lz" "-lpng" "-lpng16" "-lbz2" "-lbrotlicommon-static" "-lbrotlidec-static" "-lbrotlienc-static" "-lSDL2_mixer" "-lSDL2_gfx" "-lSDL2" "-lSDL2main" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc"

This is failing because the libraries "-lbrotlicommon-static" "-lbrotlidec-static" "-lbrotlienc-static" are not listed in an order sympathetic to the "-Wl,--as-needed" flag used.

Additional context

Debugging this as part of unblocking the CI for rust-sdl2 which has been blocked for a while on another issue that requires an update to its vcpkg ref anchor. The CI does regression tests using the vcpkg variant of build. See: Rust-SDL2/rust-sdl2#1085 where the initial blocking issue was discovered as fixed already in vcpkg; this issue was discovered while trying to move to vcpkg to HEAD as of this week.

The way cargo-vcpkg probes to find the libraries for each installed package is by looking at the manifest file ./installed/vcpkg/info/brotli_1.0.9_x64-linux.list and path matching, which unconditionally globs the archives in alphanumeric order (the way the manifest itself is generated).

While this ordering dependency could be described via pkgconfig .pc Libs, it wouldn't be understood by cargo-vcpkg as is.

A simpler fix would be to link the contents of brotlicommon-static into the brotlienc-static and brotlidec-static archives. This way both static archives could stand on their own and not impose ordering requirements on downstream consumers.

waych added a commit to waych/vcpkg that referenced this issue Mar 31, 2021
This change allows downstream consumers of the archives to not worry
about ordering the link correctly when using this package, which can be
problematic when --as-needed is passed to the linker and the order isn't
otherwise known.

Keeping the brotlicommon-static archive as is allows for probing of the
brotli libraries to remain symmetric between dynamic and static links.

Fixes static linking issue discussed in
microsoft#16991 which is blocking
rust-sdl2 CI dependent upon vcpkg discussed here
Rust-SDL2/rust-sdl2#1085 .
@JackBoosY JackBoosY added category:port-bug The issue is with a library, which is something the port should already support depends:upstream-changes Waiting on a change to the upstream project labels Apr 1, 2021
waych added a commit to waych/vcpkg-rs that referenced this issue Apr 1, 2021
vcpkg-rs discovers libraries to link using the manifest files from
vcpkg.

While ports are handled corrrectly already in dependency order, multiple
libraries defined by a single Port are otherwise not sorted. This can
cause problems when there is an explicit ordering that should be obeyed.

This is observed when building rust-sdl2 using the 'use-vcpkg' flag, as
this transitively includes the broli port, which defines 3 libraries:
libbrotlicommon, libbrotlidec and libbrotlienc. These libraries expect
to be linked with libbrotlicommon last, as otherwise rustc's invocation
of link will fail (as --as-needed is passed to the linker).

See also: microsoft/vcpkg#16991
See also: Rust-SDL2/rust-sdl2#1085

This commit works around the issue by teaching vcpkg-rs the bare minimum
required to parse (optional) .pc files if they are available in the
vcpkg package, and uses them to infer the correct ordering that should
be used.

Closes mcgoo#26
waych added a commit to mcgoo/vcpkg-rs that referenced this issue Apr 16, 2021
vcpkg-rs discovers libraries to link using the manifest files from
vcpkg. The manifest files do not indicate any ordering of library files.

While ports are handled correctly already in dependency order, multiple
libraries defined by a single Port are otherwise not sorted. This can
cause problems when there is an explicit ordering that should be obeyed.

This is observed when building rust-sdl2 using the 'use-vcpkg' flag, as
this transitively includes the brotli port, which defines 3 libraries:
libbrotlicommon, libbrotlidec and libbrotlienc. These libraries expect
to be linked with libbrotlicommon last, as otherwise rustc's invocation
of link will fail (as --as-needed is passed to the linker).

See also: microsoft/vcpkg#16991
See also: Rust-SDL2/rust-sdl2#1085

This commit works around the issue by teaching vcpkg-rs the bare minimum
required to parse (optional) .pc files if they are available in the
vcpkg package, and uses them to infer the correct ordering that should
be used.

Closes #26
@waych
Copy link
Author

waych commented Apr 16, 2021

Fixed in vcpkg-rs 0.2.12.

@waych waych closed this as completed Apr 16, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
category:port-bug The issue is with a library, which is something the port should already support depends:upstream-changes Waiting on a change to the upstream project
Projects
None yet
Development

No branches or pull requests

2 participants