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

            Bug ID: 32816
           Summary: --{undefined,--require-defined} appears to fail
                    against shared libraries
           Product: binutils
           Version: 2.44
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: ld
          Assignee: unassigned at sourceware dot org
          Reporter: alkondratenko at gmail dot com
  Target Milestone: ---

So I have libprofiler.so which is part of gperftools (.so contains CPU
profiling library). The program I link doesn't have direct dependencies against
this library. I am expecting user of the program to "activate" CPU profiling by
having CPUPROFILE environment variable defined.

As is seemingly common on modern GNU/Linux systems I have --as-needed behavior
by default, selected by gcc. So simply having -lprofiler doesn't "work", due to
as-needed behavior (which is fair game).

It seems that by having LDFLAGS=-Wl,-uProfilerStart (or equivalent
--require-defined incantation) I should be able to have libprofiler added to
DT_NEEDED of my program, but it doesn't work.

Doing same after I temporarily removed libprofiler.so (leaving only
libprofiler.a), seems to work. I see libprofiler.a being added to linking.

So it does look like --as-needed and shared libraries case is somehow "broken"
on --{undefined,require-defined} in GNU binutils.

Notably, clang's lld seems to have the same issue (although clang++ as shipped
with Debian doesn't default to as-needed), so maybe I am misreading the docs
and expecting "wrong" outcome ?

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

Reply via email to