https://sourceware.org/bugzilla/show_bug.cgi?id=32816

--- Comment #2 from Aliaksey Kandratsenka <alkondratenko at gmail dot com> ---
As noted above, I have tried --no-as-needed. And yes it kinda "works", but it
is not great.

There several imperfections with --no-as-needed:

*) automake stuff insists on having only -lfoobar (and maybe -L) in PROG_LIBADD
variable. I.e. cannot wrap -Wl,--push-state,--as-needed -Wl,--pop-state around
my -lprofiler thing. I can and currently do this in LDFLAGS but this mentions
-lprofiler "too early" in libprofiler is static library. I.e. LDFLAGS are
passed early in linking command and LIBADD is appended (which kinda makes sense
in general).

*) --as-needed is insufficient for the static library case

*) I am not 100% sold on the wisdom of distros defaulting to --as-needed, but
they do. And me asking users of my library to disable it is not perfect.

My current workaround is to do both

AM_LDFLAGS = -Wl,--push-state,--no-as-needed \
              $(cpuprofiler_LIBS) \
             -Wl,--pop-state -Wl,-uProfilerStart


and

trigram_index_LDADD = $(tcmalloc_LIBS) $(cpuprofiler_LIBS)

So kinda mentioning -lprofiler twice, once for ".so" case via --no-as-needed
and once for the ".a" case via -Wl,-u and -lprofiler at the end of linking
command line.

So ideally, we'd have --undefined flag equally working across shared and static
libraries and have everything nice and logical.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to