pgrx icon indicating copy to clipboard operation
pgrx copied to clipboard

`install` after `test --runas` Can fail with linking error

Open theory opened this issue 1 year ago • 1 comments

While working on pgxn/docker-pgxn-tools#16, using the newly-released v0.11.4, I found that running cargo pgrx install after running cargo pgrx test --runas postgres can produce linker errors:

error: linking with `cc` failed: exit status: 1
  |
  = note: LC_ALL="C" PATH="/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/bin:/usr/share/cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" VSLANG="1033" "cc" "-Wl,--version-script=/tmp/rustc9OjjaV/list" "-Wl,--no-undefined-version" "/tmp/rustc9OjjaV/symbols.o" "/work/target/debug/deps/jsonschema.11eg4wr2ghz55rpf.rcgu.o" "/work/target/debug/deps/jsonschema.13rvf2s0y41ib6kw.rcgu.o" "/work/target/debug/deps/jsonschema.13vcripajvumujy4.rcgu.o" "/work/target/debug/deps/jsonschema.16exg8shoz9x7oma.rcgu.o" "/work/target/debug/deps/jsonschema.17urviwt7pfi20qj.rcgu.o" "/work/target/debug/deps/jsonschema.184kvcnd94kbdrm8.rcgu.o" "/work/target/debug/deps/jsonschema.19ewyndus9ifodon.rcgu.o" "/work/target/debug/deps/jsonschema.1belkaexw4891kt7.rcgu.o" "/work/target/debug/deps/jsonschema.1dgszngywpbn3il4.rcgu.o" "/work/target/debug/deps/jsonschema.1jmdimnz29ks74qw.rcgu.o" "/work/target/debug/deps/jsonschema.1kqigdqkii2xo707.rcgu.o" "/work/target/debug/deps/jsonschema.1lcf7scznpeqx209.rcgu.o" "/work/target/debug/deps/jsonschema.1m9dvnnsfnq2bmc9.rcgu.o" "/work/target/debug/deps/jsonschema.1o4qoz8h2mljs0a7.rcgu.o" "/work/target/debug/deps/jsonschema.1peu02zo28l66rdb.rcgu.o" "/work/target/debug/deps/jsonschema.1q8fu5hmw7g4duj4.rcgu.o" "/work/target/debug/deps/jsonschema.1sg8l097v8uyco0w.rcgu.o" "/work/target/debug/deps/jsonschema.1u0ee4j3k2ptqpb7.rcgu.o" "/work/target/debug/deps/jsonschema.1ug2kfdvcjr6kj9m.rcgu.o" "/work/target/debug/deps/jsonschema.1yiouf571s1u5tur.rcgu.o" "/work/target/debug/deps/jsonschema.24fhknmpfl5up1x6.rcgu.o" "/work/target/debug/deps/jsonschema.2hv05100v0or9use.rcgu.o" "/work/target/debug/deps/jsonschema.2ixeh6d4wzy3tm17.rcgu.o" "/work/target/debug/deps/jsonschema.2osr7vvtjo1f0j5d.rcgu.o" "/work/target/debug/deps/jsonschema.2t2img0pmy99jb1s.rcgu.o" "/work/target/debug/deps/jsonschema.2uwdk21n96nq16e5.rcgu.o" "/work/target/debug/deps/jsonschema.2ysml96g3egzoekn.rcgu.o" "/work/target/debug/deps/jsonschema.33eggm88z9qlauc1.rcgu.o" "/work/target/debug/deps/jsonschema.384s209eiwwqk2b2.rcgu.o" "/work/target/debug/deps/jsonschema.38pyuqyjy76nkp3a.rcgu.o" "/work/target/debug/deps/jsonschema.38sxldey8j7pzt9d.rcgu.o" "/work/target/debug/deps/jsonschema.3lonpwpaa23yog7l.rcgu.o" "/work/target/debug/deps/jsonschema.3mgn6bo13fwxlmc7.rcgu.o" "/work/target/debug/deps/jsonschema.3u9tpkblv5jqxpc8.rcgu.o" "/work/target/debug/deps/jsonschema.40l7ldw5yuvezwrd.rcgu.o" "/work/target/debug/deps/jsonschema.4hf6kst21o997kbs.rcgu.o" "/work/target/debug/deps/jsonschema.4hgkwj22o2bom6kc.rcgu.o" "/work/target/debug/deps/jsonschema.4is9u10obk4x9as1.rcgu.o" "/work/target/debug/deps/jsonschema.4joxrfi1gtb46tob.rcgu.o" "/work/target/debug/deps/jsonschema.4kdam082g9omw89.rcgu.o" "/work/target/debug/deps/jsonschema.4vpi4wtl3b9rfuru.rcgu.o" "/work/target/debug/deps/jsonschema.4x85943ybripjdkd.rcgu.o" "/work/target/debug/deps/jsonschema.52fnd9iysxwpqd6k.rcgu.o" "/work/target/debug/deps/jsonschema.52x6ovdm0yljt77p.rcgu.o" "/work/target/debug/deps/jsonschema.5f1p2hil0d5atu4z.rcgu.o" "/work/target/debug/deps/jsonschema.5rykbdbuh1z3v4h.rcgu.o" "/work/target/debug/deps/jsonschema.c2crehiqgc7m57k.rcgu.o" "/work/target/debug/deps/jsonschema.cem0t0vj1ag3bhd.rcgu.o" "/work/target/debug/deps/jsonschema.ehxn8kbo3hdl4p1.rcgu.o" "/work/target/debug/deps/jsonschema.glff28ulq4z1zyt.rcgu.o" "/work/target/debug/deps/jsonschema.kffvcdikigiqlgi.rcgu.o" "/work/target/debug/deps/jsonschema.nllc8so9oxkquez.rcgu.o" "/work/target/debug/deps/jsonschema.q87jv6jyfq5mm2e.rcgu.o" "/work/target/debug/deps/jsonschema.tszymxzfyjp7o6o.rcgu.o" "/work/target/debug/deps/jsonschema.vbbj6wa0et47ooj.rcgu.o" "/work/target/debug/deps/jsonschema.147sbbhegoumj98u.rcgu.o" "-Wl,--as-needed" "-L" "/work/target/debug/deps" "-L" "/work/target/debug/build/pgrx-pg-sys-1bdf84830b84dd6c/out/cshim" "-L" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/work/target/debug/deps/libpgrx-50f61cf1442167e5.rlib" "/work/target/debug/deps/libheapless-83614608a0f18632.rlib" "/work/target/debug/deps/libstable_deref_trait-09187c9977a9d16b.rlib" "/work/target/debug/deps/libhash32-dc39e68d7c770f9e.rlib" "/work/target/debug/deps/libbyteorder-4d4498a3f9b61abc.rlib" "/work/target/debug/deps/libseahash-463d3ab8305d287e.rlib" "/work/target/debug/deps/libserde_cbor-0c518402eb6c7914.rlib" "/work/target/debug/deps/libhalf-99fc46573f85bedb.rlib" "/work/target/debug/deps/libatomic_traits-c3fd6a21fb74cf9a.rlib" "/work/target/debug/deps/libthiserror-7e89adbc84c85c8e.rlib" "/work/target/debug/deps/libuuid-861b88f18a4f8379.rlib" "/work/target/debug/deps/libenum_map-6d1e8f0cf3b229a6.rlib" "/work/target/debug/deps/libbitvec-1fe89604bec0f400.rlib" "/work/target/debug/deps/libwyz-614f770571c8b75a.rlib" "/work/target/debug/deps/libtap-adcf8f99e0ae657d.rlib" "/work/target/debug/deps/libradium-9e36e7beb8716cce.rlib" "/work/target/debug/deps/libfunty-7a8524ac63806064.rlib" "/work/target/debug/deps/libpgrx_pg_sys-9dfc9afcfe6ac419.rlib" "/work/target/debug/deps/libpgrx_sql_entity_graph-c8ad7468cc7b2df5.rlib" "/work/target/debug/deps/libunescape-4ab22969bb90f958.rlib" "/work/target/debug/deps/libpetgraph-57685839dd56e2ef.rlib" "/work/target/debug/deps/libindexmap-c1644c9c5b680b05.rlib" "/work/target/debug/deps/libequivalent-5300cca36e6a8478.rlib" "/work/target/debug/deps/libhashbrown-37eb51948df09aed.rlib" "/work/target/debug/deps/libfixedbitset-718c358477c6e70a.rlib" "/work/target/debug/deps/libconvert_case-034d4bd9433bf966.rlib" "/work/target/debug/deps/libunicode_segmentation-7d24be95d59e5ef9.rlib" "/work/target/debug/deps/libeyre-c67701f9711d1c0a.rlib" "/work/target/debug/deps/libindenter-9200384207421dd2.rlib" "/work/target/debug/deps/libsyn-322b6a14dc1da1a8.rlib" "/work/target/debug/deps/libquote-1de0716bdfc844c0.rlib" "/work/target/debug/deps/libproc_macro2-665dff81a27d3ffa.rlib" "/work/target/debug/deps/libunicode_ident-150d138dd2ece702.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libproc_macro-f489204ca691ad27.rlib" "/work/target/debug/deps/libsptr-e9409df750a98e8c.rlib" "/work/target/debug/deps/libmemoffset-5f2986d7e8c5e6f5.rlib" "/work/target/debug/deps/libbitflags-b7753e62b0ea4270.rlib" "/work/target/debug/deps/libboon-c2d2b2a5a43a398f.rlib" "/work/target/debug/deps/libfluent_uri-a58b2aa542cb05ad.rlib" "/work/target/debug/deps/libbitflags-cfb116b385856674.rlib" "/work/target/debug/deps/libahash-6e1831bab7aba738.rlib" "/work/target/debug/deps/libgetrandom-77e15d4ce0201d60.rlib" "/work/target/debug/deps/liblibc-06d9b513b3b2af67.rlib" "/work/target/debug/deps/libcfg_if-6acc4c0cbca6382c.rlib" "/work/target/debug/deps/libzerocopy-ff117afefe1b94c9.rlib" "/work/target/debug/deps/libonce_cell-edf13363a518c0aa.rlib" "/work/target/debug/deps/libbase64-f546d1c91507961c.rlib" "/work/target/debug/deps/liburl-bcbcc9a5ed9822e5.rlib" "/work/target/debug/deps/libidna-aa1af218a494135b.rlib" "/work/target/debug/deps/libunicode_normalization-977c79c0a76d8053.rlib" "/work/target/debug/deps/libtinyvec-1621ae7b66b4ab1f.rlib" "/work/target/debug/deps/libtinyvec_macros-ab98fdd2084a8fb0.rlib" "/work/target/debug/deps/libunicode_bidi-5ec43738ce55a8de.rlib" "/work/target/debug/deps/libform_urlencoded-ff20854f9fb5839c.rlib" "/work/target/debug/deps/libpercent_encoding-2167977165d564a3.rlib" "/work/target/debug/deps/libserde_json-b72a51c544cb0cb4.rlib" "/work/target/debug/deps/libitoa-ca05af68966fa505.rlib" "/work/target/debug/deps/libryu-89c923ee95af4458.rlib" "/work/target/debug/deps/libserde-f356496e132b7cd7.rlib" "/work/target/debug/deps/libregex-34d6fb6918b941cd.rlib" "/work/target/debug/deps/libregex_automata-faa57953cb412cc1.rlib" "/work/target/debug/deps/libaho_corasick-ba948ef9c76f36dc.rlib" "/work/target/debug/deps/libmemchr-d0ec26fcc9bfd884.rlib" "/work/target/debug/deps/libregex_syntax-425ab12db68867d6.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libstd-f0ae9f5a3e408c19.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libpanic_unwind-e637fdc20a31c302.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libobject-d5d503c2bab45e28.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libmemchr-e76c52c1ff3c621b.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libaddr2line-7b6c47abe95eb011.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libgimli-5eb5b37b98bc0f52.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/librustc_demangle-67872ee6e7e3b729.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libstd_detect-c5e671c20f543b1c.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libhashbrown-ca65d6147a9eff08.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-52d62168ec198cdf.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libminiz_oxide-c109e2c03cffd5c9.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libadler-65fc09ebdef612f3.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libunwind-d4c23b7d11003ac2.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libcfg_if-1f4783f35fb768c0.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/liblibc-5b6c2e3e5ec0867e.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/liballoc-5e02f6c676077495.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/librustc_std_workspace_core-6f66464c4779c9c4.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libcore-e3413fe6245f7ad8.rlib" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libcompiler_builtins-90f66f43d0eddeb0.rlib" "-Wl,-Bdynamic" "-lresolv" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/usr/share/rustup/toolchains/stable-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib" "-o" "/work/target/debug/deps/libjsonschema.so" "-Wl,--gc-sections" "-shared" "-Wl,-z,relro,-z,now" "-nodefaultlibs"
  = note: /usr/bin/ld: cannot find /work/target/debug/deps/jsonschema.3mgn6bo13fwxlmc7.rcgu.o: No such file or directory
          collect2: error: ld returned 1 exit status

root@4010b889f34b:/work# ls -l /work/target/debug/deps/jsonschema.3mgn6bo13fwxlmc7.rcgu.o
-rw-r--r-- 2 root root 12992 Apr 19 21:37 /work/target/debug/deps/jsonschema.3mgn6bo13fwxlmc7.rcgu.o

This is super weird, because as you can see on that last line the file does in fact exist! And both commands run as root.

The workaround I found was to run pgrx install before running pgrx test, and then it appears to have no problem.

Replicate

git clone [email protected]:pgxn/docker-pgxn-tools.git
cd docker-pgxn-tools
docker build -t pgxn-tools .
cd $pgrx_project
docker run -it --rm -v "$PWD:/work"  --entrypoint bash -w /work pgxn-tools
pg-start 16
cargo install --locked cargo-pgrx --version 0.11.4
cargo pgrx init --pg16=$(which pg_config)
cargo pgrx package --test --pg-config $(which pg_config)
cargo pgrx test --runas postgres --pgdata /var/lib/postgresql/pgrx pg16
cargo pgrx install --test --pg-config $(which pg_config)

theory avatar Apr 19 '24 21:04 theory

possibly actually an upstream issue re: how the linker gets invoked, although we should check on our end first.

workingjubilee avatar Apr 19 '24 22:04 workingjubilee