Bug#944736: gcc-9 doesn't link properly when using ld.bfd
Package: gcc-9
Version: 9.2.1-19
Severity: important
Dear Maintainer,
When compiling this short example:
/* a.c begins here */
#include <stdio.h>
#include <gmp.h>
int main(void) {
mpf_t y;
mpf_init2(y, 128);
mpf_sqrt_ui(y, 2UL);
gmp_printf("%.*Ff\n", 38, y);
return 0;
}
/* a.c ends here */
with the command :
$ gcc -lgmp a.c
gcc produces this error:
/usr/bin/ld: /tmp/cclW7Wdd.o: in function `main':
a.c:(.text+0x15): undefined reference to `__gmpf_init2'
/usr/bin/ld: a.c:(.text+0x26): undefined reference to `__gmpf_sqrt_ui'
/usr/bin/ld: a.c:(.text+0x43): undefined reference to `__gmp_printf'
collect2: error: ld returned 1 exit status
Notice, libgmp is installed, according to this commands:
$ apt-cache policy libgmp-dev
returns:
libgmp-dev:
Installed: 2:6.1.2+dfsg-4
Candidate: 2:6.1.2+dfsg-4
Version table:
*** 2:6.1.2+dfsg-4 900
900 https://deb.debian.org/debian sid/main amd64 Packages
100 /var/lib/dpkg/status
But that works as exepected when compiling with clang, and with gcc-8.
That also works with the command:
$ gcc -fuse-ld=gold -lgmp a.c
It was also successful when I tried with lld from the package lld-8.
I have obtained the same results with th following snippets:
/* b.c begins here */
#include <glib.h>
int main(void) {
gchar *str="Just a string";
gchar *str2;
str2 = g_strdup(str);
return 0;
}
/* b.c ends here */
I compiled the latter with:
$ gcc $(pkg-configs --cflags --libs glib-2.0) b.c
which returns:
/usr/bin/ld: /tmp/ccuQaGQ7.o: in function `main':
b.c:(.text+0x1b): undefined reference to `g_strdup'
collect2: error: ld returned 1 exit status
But that linked properly with ld.gold and lld-8.
I can't figure out how to correct this issue. One can
symlinks /usr/bin/ld to /usr/bin/ld.gold to not have to pass
--fuse-ld=gold, but this is twisted. The default bfd linker should
work.
Cheers
--
Gilles Crèvecœur
-- System Information:
Debian Release: bullseye/sid
APT prefers unstable
APT policy: (900, 'unstable'), (100, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 5.3.1-e1 (SMP w/2 CPU cores; PREEMPT)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8), LANGUAGE=fr (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
Versions of packages gcc-9 depends on:
ii binutils 2.33.1-2
ii cpp-9 9.2.1-19
ii gcc-9-base 9.2.1-19
ii libc6 2.29-3
ii libcc1-0 9.2.1-19
ii libgcc-9-dev 9.2.1-19
ii libgcc1 1:9.2.1-19
ii libgmp10 2:6.1.2+dfsg-4
ii libisl21 0.21-2
ii libmpc3 1.1.0-1
ii libmpfr6 4.0.2-1
ii libstdc++6 9.2.1-19
ii zlib1g 1:1.2.11.dfsg-1+b1
Versions of packages gcc-9 recommends:
ii libc6-dev 2.29-3
Versions of packages gcc-9 suggests:
ii gcc-9-doc 9.2.0-1
ii gcc-9-locales 9.2.1-19
pn gcc-9-multilib <none>
pn libasan5-dbg <none>
pn libatomic1-dbg <none>
pn libgcc1-dbg <none>
pn libgomp1-dbg <none>
pn libitm1-dbg <none>
pn liblsan0-dbg <none>
pn libquadmath0-dbg <none>
pn libtsan0-dbg <none>
pn libubsan1-dbg <none>
-- no debconf information
Reply to: