help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

guix build problem, no RUNPATH on libpthread.so


From: Michael Zucchi
Subject: guix build problem, no RUNPATH on libpthread.so
Date: Mon, 20 Apr 2020 19:25:14 +0930
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0


I posted about this months ago but I think I got no answers or just gave up.  However a reddit discussion and boredom prompted me to revisit it and I think I have something that might be useful to someone.  I'm sorry I probably wont put much more time into this for the moment but I can try a few things out if someone gets back to me while the iron is hot.

I'm building on slackware64 current which is more or less comprised of 'stable bleeding edge' and mostly unadulterated packages.

Using the instructions here after a pull and upgrade of guix and a pull of the repository: https://guix.gnu.org/manual/devel/en/html_node/Building-from-Git.html#Building-from-Git

I ran guix environment guix --pure.

Then I ran configure but it failed saying that guile 3.0 could not be found.  After some poking i found this is provided by the guile-next package, so I had to manually install that.  So the instructions didn't work right off the bat but configure then completed just fine.

However make then fails:

[... lots and lots of errors about po4a-translate ...]

make[2]: [Makefile:5931: doc/guix-cookbook.de.texi] Error 1 (ignored)
  CXXLD    guix-daemon
/usr/bin/ld: /gnu/store/ahqgl4h89xqj695lgqvsaf6zh2nhy4pj-glibc-2.29/lib/libpthread.so.0: undefined reference to `__libc_vfork@GLIBC_PRIVATE'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:3562: guix-daemon] Error 1
make[2]: Leaving directory '/home/notzed/src/guix'
make[1]: *** [Makefile:4929: all-recursive] Error 1
make[1]: Leaving directory '/home/notzed/src/guix'
make: *** [Makefile:3350: all] Error 2

Sigh ok, lets run make V=1 so I can see what it did.

notzed@shitzone:~/src/guix$ g++ -Wall -std=c++11 -g -O2   -o guix-daemon nix/nix-daemon/guix_daemon-nix-daemon.o nix/nix-daemon/guix_daemon-guix-daemon.o libstore.a libutil.a libformat.a -lz -L/gnu/store/i6l1579g80387rda658jy9cfqq82643d-sqlite-3.28.0/lib -lsqlite3 -L/gnu/store/svalmdlzh2apapqjfsrp33qgkgcgbmc0-libgcrypt-1.8.5/lib -lgcrypt -lbz2 /usr/bin/ld: /gnu/store/ahqgl4h89xqj695lgqvsaf6zh2nhy4pj-glibc-2.29/lib/libpthread.so.0: undefined reference to `__libc_vfork@GLIBC_PRIVATE'
collect2: error: ld returned 1 exit status

libsqlite3.so is the one dragging in libpthread.so (or at least one thereof):

notzed@shitzone:~/src/guix$ ldd /gnu/store/i6l1579g80387rda658jy9cfqq82643d-sqlite-3.28.0/lib/libsqlite3.so
        linux-vdso.so.1 (0x00007ffd851f1000)
        libm.so.6 => /gnu/store/ahqgl4h89xqj695lgqvsaf6zh2nhy4pj-glibc-2.29/lib/libm.so.6 (0x00007f2e5ede1000)         libdl.so.2 => /gnu/store/ahqgl4h89xqj695lgqvsaf6zh2nhy4pj-glibc-2.29/lib/libdl.so.2 (0x00007f2e5eddc000)         libpthread.so.0 => /gnu/store/ahqgl4h89xqj695lgqvsaf6zh2nhy4pj-glibc-2.29/lib/libpthread.so.0 (0x00007f2e5edbb000)         libgcc_s.so.1 => /gnu/store/2plcy91lypnbbysb18ymnhaw3zwk8pg1-gcc-7.4.0-lib/lib/libgcc_s.so.1 (0x00007f2e5eda2000)         libc.so.6 => /gnu/store/ahqgl4h89xqj695lgqvsaf6zh2nhy4pj-glibc-2.29/lib/libc.so.6 (0x00007f2e5ebe8000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2e5f035000)

notzed@shitzone:~$ ldd /gnu/store/ahqgl4h89xqj695lgqvsaf6zh2nhy4pj-glibc-2.29/lib/libpthread.so.0
        linux-vdso.so.1 (0x00007ffd0e25f000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f013c344000)
/gnu/store/ahqgl4h89xqj695lgqvsaf6zh2nhy4pj-glibc-2.29/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f013c58c000)

But unlike the other libraries libpthread.so doesn't have an explicit path to it's matching libc and so just uses the system one.  slackware current currently has glibc 2.30, and it seems it or it's build configuration isn't compatible with glibc 2.29 as supplied by guix.

To me this looks like a bug with the glibc package creation as it seems to apply to all the other libraries in *-glibc-2.29/lib as well.  The package definition has the runpath stuff disabled which is what I presume causes this even though it's obviously intentional.

I've installed blender and that works and i think it builds from source but for whatever reason it resolves at link and run time but this doesn't.  I tried playing with the link order but it made no difference.

If I install gcc-toolchain then make completes, but that seems like a hack and it causes other issues with the use of the system as a development machine.  If gcc is linking with files which may get removed because they aren't referenced by a package (and i will not be doing that for development), then that's a pretty nasty gotcha somewhere down the line, not to mention it forces all libraries to be through guix so an all-in rather than non-interfering co-existence.

So given I got it to at least build using the install gcc-toolchain hack, ...

Well make check then fails because this system's kernel  doesn't have CONFIG_IA32_EMULATION enabled and a bunch of tests require the use of bootstrap binaries.  These provide aarch64, armhf, mips64el, i686, but no amd64 (or x86_64 if you prefer) binaries.

e.g. tests/challenge.log:

[lots of this, i presume this is a guile 2 v guile 3 thing again?]

;;; In procedure load-thunk-from-memory: incompatible bytecode kind
;;; WARNING: loading compiled file /home/notzed/src/guix/guix/nar.go failed:
;;; In procedure load-thunk-from-memory: incompatible bytecode kind
;;; WARNING: loading compiled file /home/notzed/src/guix/guix/store/database.go failed:
;;; In procedure load-thunk-from-memory: incompatible bytecode kind
;;; WARNING: loading compiled file /gnu/store/6fnsh1g610wps99jgsbd6d9hik1acb0s-profile/lib/guile/2.2/site-ccache/sqlite3.go failed:
;;; In procedure load-thunk-from-memory: incompatible bytecode kind
;;; WARNING: loading compiled file /home/notzed/src/guix/guix/build/store-copy.go failed:
;;; In procedure load-thunk-from-memory: incompatible bytecode kind
;;; WARNING: loading compiled file /home/notzed/src/guix/guix/pki.go failed:
;;; In procedure load-thunk-from-memory: incompatible bytecode kind
@ build-started /home/notzed/src/guix/test-tmp/store/lpa2w62qpklqh0x3r99030mhgx7qym5j-guile-bootstrap-2.0.drv - x86_64-linux /home/notzed/src/guix/test-tmp/var/log/guix/drvs/lp//a2w62qpklqh0x3r99030mhgx7qym5j-guile-bootstrap-2.0.drv.bz2 21892 while setting up the build environment: executing `/home/notzed/src/guix/test-tmp/store/f0ips0sdyhnhlfdqayvcbddqlijk7iid-bash': Exec format error builder for `/home/notzed/src/guix/test-tmp/store/lpa2w62qpklqh0x3r99030mhgx7qym5j-guile-bootstrap-2.0.drv' failed with exit code 1 @ build-failed /home/notzed/src/guix/test-tmp/store/lpa2w62qpklqh0x3r99030mhgx7qym5j-guile-bootstrap-2.0.drv - 1 builder for `/home/notzed/src/guix/test-tmp/store/lpa2w62qpklqh0x3r99030mhgx7qym5j-guile-bootstrap-2.0.drv' failed with exit code 1
actual-value: #f
actual-error:
+ (%exception
+   #<&store-protocol-error message: "build of `/home/notzed/src/guix/test-tmp/store/lpa2w62qpklqh0x3r99030mhgx7qym5j-guile-bootstrap-2.0.drv' failed" status: 100>)
result: FAIL

And finally once tests/print.scm prints a red FAIL it just seems to hang indefinitely.

select(4, [3], NULL, NULL, {tv_sec=0, tv_usec=200}) = 0 (Timeout)
stat("/tmp/guix-directory.8o50sG/token1", 0x7ffc07a78740) = -1 ENOENT (No such file or directory)
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0

strace shows this looping infinitely.  The test itself also fails due to the bash binary not being compatible with the system.


 !Z


----

Addendum:



Just for interest here is the output of g++ -v:

notzed@shitzone:~/src/guix$ g++ -v -Wall -std=c++11 -g -O2   -o guix-daemon nix/nix-daemon/guix_daemon-nix-daemon.o nix/nix-daemon/guix_daemon-guix-daemon.o libstore.a libutil.a libformat.a -lz -L/gnu/store/i6l1579g80387rda658jy9cfqq82643d-sqlite-3.28.0/lib -lsqlite3 -L/gnu/store/svalmdlzh2apapqjfsrp33qgkgcgbmc0-libgcrypt-1.8.5/lib -lgcrypt -lbz2
Reading specs from /usr/lib64/gcc/x86_64-slackware-linux/9.3.0/specs
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-slackware-linux/9.3.0/lto-wrapper
Target: x86_64-slackware-linux
Configured with: ../configure --prefix=/usr --libdir=/usr/lib64 --mandir=/usr/man --infodir=/usr/info --enable-shared --enable-bootstrap --enable-languages=ada,brig,c,c++,d,fortran,go,lto,objc,obj-c++ --enable-threads=posix --enable-checking=release --enable-objc-gc --with-system-zlib --enable-libstdcxx-dual-abi --with-default-libstdcxx-abi=new --disable-libstdcxx-pch --disable-libunwind-exceptions --enable-__cxa_atexit --disable-libssp --enable-gnu-unique-object --enable-plugin --enable-lto --disable-install-libiberty --disable-werror --with-gnu-ld --with-isl --verbose --with-arch-directory=amd64 --disable-gtktest --enable-clocale=gnu --disable-multilib --target=x86_64-slackware-linux --build=x86_64-slackware-linux --host=x86_64-slackware-linux
Thread model: posix
gcc version 9.3.0 (GCC)
COMPILER_PATH=/usr/libexec/gcc/x86_64-slackware-linux/9.3.0/:/usr/libexec/gcc/x86_64-slackware-linux/9.3.0/:/usr/libexec/gcc/x86_64-slackware-linux/:/usr/lib64/gcc/x86_64-slackware-linux/9.3.0/:/usr/lib64/gcc/x86_64-slackware-linux/:/usr/lib64/gcc/x86_64-slackware-linux/9.3.0/../../../../x86_64-slackware-linux/bin/
LIBRARY_PATH=/usr/lib64/gcc/x86_64-slackware-linux/9.3.0/:/usr/lib64/gcc/x86_64-slackware-linux/9.3.0/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/gnu/store/6fnsh1g610wps99jgsbd6d9hik1acb0s-profile/lib/:/usr/lib64/gcc/x86_64-slackware-linux/9.3.0/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-Wall' '-std=c++11' '-g' '-O2' '-o' 'guix-daemon' '-L/gnu/store/i6l1579g80387rda658jy9cfqq82643d-sqlite-3.28.0/lib' '-L/gnu/store/svalmdlzh2apapqjfsrp33qgkgcgbmc0-libgcrypt-1.8.5/lib' '-shared-libgcc' '-mtune=generic' '-march=x86-64'  /usr/libexec/gcc/x86_64-slackware-linux/9.3.0/collect2 -plugin /usr/libexec/gcc/x86_64-slackware-linux/9.3.0/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-slackware-linux/9.3.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccT4F8CQ.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o guix-daemon /usr/lib64/gcc/x86_64-slackware-linux/9.3.0/../../../../lib64/crt1.o /usr/lib64/gcc/x86_64-slackware-linux/9.3.0/../../../../lib64/crti.o /usr/lib64/gcc/x86_64-slackware-linux/9.3.0/crtbegin.o -L/gnu/store/i6l1579g80387rda658jy9cfqq82643d-sqlite-3.28.0/lib -L/gnu/store/svalmdlzh2apapqjfsrp33qgkgcgbmc0-libgcrypt-1.8.5/lib -L/usr/lib64/gcc/x86_64-slackware-linux/9.3.0 -L/usr/lib64/gcc/x86_64-slackware-linux/9.3.0/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/gnu/store/6fnsh1g610wps99jgsbd6d9hik1acb0s-profile/lib -L/usr/lib64/gcc/x86_64-slackware-linux/9.3.0/../../.. nix/nix-daemon/guix_daemon-nix-daemon.o nix/nix-daemon/guix_daemon-guix-daemon.o libstore.a libutil.a libformat.a -lz -lsqlite3 -lgcrypt -lbz2 -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib64/gcc/x86_64-slackware-linux/9.3.0/crtend.o /usr/lib64/gcc/x86_64-slackware-linux/9.3.0/../../../../lib64/crtn.o /usr/bin/ld: /gnu/store/ahqgl4h89xqj695lgqvsaf6zh2nhy4pj-glibc-2.29/lib/libpthread.so.0: undefined reference to `__libc_vfork@GLIBC_PRIVATE'
collect2: error: ld returned 1 exit status




reply via email to

[Prev in Thread] Current Thread [Next in Thread]