[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] build: Fix shared build with gcc-7.
From: |
Jan Nieuwenhuizen |
Subject: |
Re: [PATCH] build: Fix shared build with gcc-7. |
Date: |
Thu, 19 Mar 2020 12:13:13 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) |
Samuel Thibault writes:
Hello,
> Jan Nieuwenhuizen, le sam. 14 mars 2020 11:35:18 +0100, a ecrit:
>> i586-pc-gnu-gcc -L. -L/tmp/guix-build-hurd-0.9-1.91a5167.drv-0/source/libbpf/
...
-o test-fcntl \
>> test-fcntl.o \
>> '-Wl,-(' ../libhurdbugaddr/libhurdbugaddr.so ../libfshelp/libfshelp.so
>> \
>> -lpthread \
>> '-Wl,-)'
>> i586-pc-gnu-ld: warning: libshouldbeinlibc.so.0.3, needed by
>> ../libfshelp/libfshelp.so, not found (try using -rpath or -rpath-link)
> ? One shouldn't need to add rpaths for this to succeed, -L should be
> more than enough.
Until now, this has been my undestanding too. (see below)
> What seems odd in your build log is
> -L/tmp/guix-build-hurd-0.9-1.91a5167.drv-0/source/libshouldbeinlibc/
> which seems to be pointing to the source instead of the build tree. I
> guess that's where something needs to be fixed.
Ah, my bad. I pasted intermediate debugging output where I alreaded
modified Makeconf; sorry!
> When I build the Hurd,
> I'd have something like this instead:
> gcc -L. -L../libihash/ -L../libports/ -L../libiohelp/ -L../libhurdbugaddr/
> -L../libshouldbeinlibc/ -L../libfshelp/ -std=gnu99 -fgnu89-inline -Wall -g
> -O3 -fno-strict-aliasing -g -O2 -uargp_program_bug_address -o test-fcntl \
> test-fcntl.o \
> '-Wl,-(' ../libhurdbugaddr/libhurdbugaddr.so ../libfshelp/libfshelp.so \
> -lpthread \
> '-Wl,-)'
>
> and then gcc can find libshouldbeinlibc.so.0.3 in ../libshouldbeinlibc/
> as expected.
Yes, luckily I get that too, on the Hurd.
However, in the cross build from Guix, when I run
--8<---------------cut here---------------start------------->8---
$ i586-pc-gnu-gcc -L. -L../libihash/ -L../libports/ -L../libiohelp/
-L../libhurdbugaddr/ -L../libshouldbeinlibc/ -L../libfshelp/ -std=gnu99
-fgnu89-inline -Wall -g -O3 -fno-strict-aliasing -g -O2
-uargp_program_bug_address -o test-fcntl \
test-fcntl.o \
'-Wl,-(' ../libhurdbugaddr/libhurdbugaddr.so ../libfshelp/libfshelp.so \
-lpthread \
'-Wl,-)'
--8<---------------cut here---------------end--------------->8---
I get
--8<---------------cut here---------------start------------->8---
i586-pc-gnu-ld: warning: libshouldbeinlibc.so.0.3, needed by
../libfshelp/libfshelp.so, not found (try using -rpath or -rpath-link)
i586-pc-gnu-ld: warning: libiohelp.so.0.3, needed by ../libfshelp/libfshelp.so,
not found (try using -rpath or -rpath-link)
i586-pc-gnu-ld: warning: libports.so.0.3, needed by ../libfshelp/libfshelp.so,
not found (try using -rpath or -rpath-link)
i586-pc-gnu-ld: warning: libihash.so.0.3, needed by ../libfshelp/libfshelp.so,
not found (try using -rpath or -rpath-link)
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`ports_get_right'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`__assert_fail_backtrace'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`ports_port_ref'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`hurd_ihash_locp_find'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`ports_destroy_right'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to `exec_reauth'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to `idvec_free'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`hurd_ihash_remove'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`ports_port_deref_weak'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`hurd_ihash_find'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`hurd_ihash_hash32'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`ports_create_class'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`ports_create_port'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to `idvec_setid'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`hurd_ihash_locp_remove'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`hurd_ihash_locp_add'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`ports_port_deref'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`ports_port_ref_weak'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`idvec_merge_auth'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to `make_idvec'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`idvec_tail_contains'
i586-pc-gnu-ld: ../libfshelp/libfshelp.so: undefined reference to
`hurd_ihash_add'
collect2: error: ld returned 1 exit status
--8<---------------cut here---------------end--------------->8---
Note how it says: (try using -rpath ...?). While I also thought that -L
should be enough, I "simply" obeyed and tried that; when I do that:
--8<---------------cut here---------------start------------->8---
i586-pc-gnu-gcc -L. -Wl,-rpath=../libihash/ -Wl,-rpath=../libports/
-Wl,-rpath=../libiohelp/ -Wl,-rpath=../libhurdbugaddr/
-Wl,-rpath=../libshouldbeinlibc/ -L../libfshelp/ -std=gnu99 -fgnu89-inline
-Wall -g -O3 -fno-strict-aliasing -g -O2 -uargp_program_bug_address -o
test-fcntl \
test-fcntl.o \
'-Wl,-(' ../libhurdbugaddr/libhurdbugaddr.so ../libfshelp/libfshelp.so \
-lpthread \
'-Wl,-)'
--8<---------------cut here---------------end--------------->8---
it succeeds. So, then I sent off the bug report with patch.
So something is different....Meanwhile, I have compared running this
command using *gcc -v -v and running collect2 by hand (see logs
attached).
The "interesting" bits differences are these, the failing cross collect2:
--8<---------------cut here---------------start------------->8---
...
attempt to open ../libfshelp/libfshelp.so succeeded
../libfshelp/libfshelp.so
attempt to open ./libpthread.so failed
attempt to open ./libpthread.a failed
attempt to open ../libihash//libpthread.so failed
attempt to open ../libihash//libpthread.a failed
...
libshouldbeinlibc.so.0.3 needed by ../libfshelp/libfshelp.so
attempt to open
/gnu/store/wwmnc3xizcq0nxrbrihgj6w0nk89vlyi-glibc-cross-i586-pc-gnu-2.31/lib/libshouldbeinlibc.so.0.3
failed
attempt to open
/gnu/store/j7z6n0m18djk0pka51ffivmjc073qcj9-gcc-cross-i586-pc-gnu-7.5.0/i586-pc-gnu/lib/libshouldbeinlibc.so.0.3
failed
attempt to open
/gnu/store/fx77mhyfi9mx0ihg1wi76gxpfqsyi0vn-hurd-0.9-1.91a5167/lib/libshouldbeinlibc.so.0.3
failed
attempt to open
/gnu/store/wwmnc3xizcq0nxrbrihgj6w0nk89vlyi-glibc-cross-i586-pc-gnu-2.31/lib/libshouldbeinlibc.so.0.3
failed
attempt to open
/gnu/store/j7z6n0m18djk0pka51ffivmjc073qcj9-gcc-cross-i586-pc-gnu-7.5.0/i586-pc-gnu/lib/libshouldbeinlibc.so.0.3
failed
attempt to open /no-ld-lib-path/libshouldbeinlibc.so.0.3 failed
attempt to open
/gnu/store/jd7iv440iw3ppcpzx2qwg0ab6y7qm9sn-binutils-cross-i586-pc-gnu-2.34/i586-pc-gnu/lib/libshouldbeinlibc.so.0.3
failed
attempt to open
/gnu/store/wwmnc3xizcq0nxrbrihgj6w0nk89vlyi-glibc-cross-i586-pc-gnu-2.31/lib/libshouldbeinlibc.so.0.3
failed
attempt to open
/gnu/store/j7z6n0m18djk0pka51ffivmjc073qcj9-gcc-cross-i586-pc-gnu-7.5.0/i586-pc-gnu/lib/libshouldbeinlibc.so.0.3
failed
attempt to open
/gnu/store/fx77mhyfi9mx0ihg1wi76gxpfqsyi0vn-hurd-0.9-1.91a5167/lib/libshouldbeinlibc.so.0.3
failed
attempt to open
/gnu/store/wwmnc3xizcq0nxrbrihgj6w0nk89vlyi-glibc-cross-i586-pc-gnu-2.31/lib/libshouldbeinlibc.so.0.3
failed
attempt to open
/gnu/store/j7z6n0m18djk0pka51ffivmjc073qcj9-gcc-cross-i586-pc-gnu-7.5.0/i586-pc-gnu/lib/libshouldbeinlibc.so.0.3
failed
attempt to open /no-ld-lib-path/libshouldbeinlibc.so.0.3 failed
attempt to open
/gnu/store/jd7iv440iw3ppcpzx2qwg0ab6y7qm9sn-binutils-cross-i586-pc-gnu-2.34/i586-pc-gnu/lib/libshouldbeinlibc.so.0.3
failed
...
--8<---------------cut here---------------end--------------->8---
the succeeding cross collect2, adding -rpath
--8<---------------cut here---------------start------------->8---
...
libshouldbeinlibc.so.0.3 needed by ../libfshelp/libfshelp.so
attempt to open ../libihash//libshouldbeinlibc.so.0.3 failed
attempt to open ../libports//libshouldbeinlibc.so.0.3 failed
attempt to open ../libiohelp//libshouldbeinlibc.so.0.3 failed
attempt to open ../libhurdbugaddr//libshouldbeinlibc.so.0.3 failed
found libshouldbeinlibc.so.0.3 at ../libshouldbeinlibc//libshouldbeinlibc.so.0.3
...
--8<---------------cut here---------------end--------------->8---
the succeeding native collect2, apparentlty finding some libraries in
/usr
--8<---------------cut here---------------start------------->8---
... attempt to open ../libfshelp/libfshelp.so succeeded
../libfshelp/libfshelp.so ... ../libshouldbeinlibc/libshouldbeinlibc.so
/usr/lib/i386-gnu/libpthread_nonshared.a ...
/usr/lib/gcc/i686-gnu/9/libgcc.a --8<---------------cut
here---------------end--------------->8---
Now, I'm not 100% sure that I am not misrepresenting the logs, I find
them difficult to read; full logs are attached.
I also am not sure if linking to /usr/lib/* is a feature or a bug; i.e.:
Is our Guix gcc cross compiling environment not finished yet, and should
we add -rpath fixes there; or should the -rpath fix be in the Hurd?
Thoughts?
Greetings,
janneke
collect2-cross.log
Description: Binary data
collect2-cross-rpath.log
Description: Binary data
collect2-native.log
Description: Binary data
--
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | AvatarĀ® http://AvatarAcademy.com