Ville Skyttä wrote:
I'm wondering if I've stumbled upon a bug in ld's --as-needed or something I was not aware of, here's an example, foo.c: extern void gtk_main(); int main() { gtk_main(); } Now, libgtk (as of FC5) contains lots of undefined gdk_* symbols, so trying "gcc -lgtk foo.c" on the above fails as expected, and "gcc -lgdk -lgtk foo.c" succeeds, again as expected. However, to my surprise, "gcc -Wl,--as-needed -lgdk -lgtk foo.c" fails: /tmp/ccImoouo.o: In function `main': foo.c:(.text+0xa): undefined reference to `gtk_main' collect2: ld returned 1 exit status Is this how --as-needed should behave? Ie. the linker does not appear to notice that linking with libgdk is actually needed in this case and drops it -> boom.
Yes. Linking goes in order. gdk is scanned, then gtk, then foo.c, and then implicit libc at the end. foo.c references symbols in gtk, but you've already scanned it, and since you asked for as-needed semantics there was nothing already mentioned that referenced gtk.
- ajax -- fedora-devel-list mailing list fedora-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/fedora-devel-list