On Tuesday, January 21, 2020 1:52:54 PM EST Jeff Law wrote:
> > > That was the idea. Provide a trivial opt-out so that
upstreams had
> > > time to fix properly. I even volunteered to add the opt-out marker
> > > where appropriate to minimize the FTBFS issues. I also volunteered
> > > to help with the packages that don't honor flags injection.
> >
> > This sounds reasonable to me.
> >
> > The PR is
> >
https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/77
> >
> > I have reopened it.
> >
> > The mass rebuild will notify the maintainrs and they can use that macro
> > to short-workaround the problem. It' also easier to grep from the specs
> > than custom patches and whatnots
>
> I need something like this for suricata. It has about 45 variables
> causing this. And it's not a simple "extern" addition because it
looks
> like in many cases the variable was never placed in a C file. Simply
> adding extern keyword leads undefined reference errors. This will take a
> while to sort out with upstream.
You also have to be careful if you're building shared libraries -- I
was looking at a package (I forget which) which built multiple DSOs.
If you're not careful you can end up with some DSOs which wouldn't have
the definition -- worse yet, you're not going to get an undefined
symbol when you build those DSOs.
So, I have a weird one. I'm compiling audit and getting multiple definitions.
I have
/usr/bin/ld: ausearch-checkpt.o:/home/sgrubb/working/BUILD/audit-3.0/src/
ausearch-common.h:53: multiple definition of `event_node_list'; ausearch.o:/
home/sgrubb/working/BUILD/audit-3.0/src/ausearch-common.h:53: first defined
here
$ cat ausearch-checkpt.c | grep event_node_list
Hmm. Nothing found.
$ objdump --syms ausearch-checkpt.o | grep event_node_list
0000000000000040 g O .bss 0000000000000008 event_node_list
It's in the object file? In ausearch-checkpt.c we have #include "ausearch-
checkpt.h which does not define it. That file has #include "ausearch-llist.h"
which does not define it. That file has #include "ausearch-common.h" which does
define it as:
extern slist *event_node_list;
So, what appears to be happening is all these C files are creating a definition
based on this and they don't even use this variable. It seems like they would
create a spot in their table *if and only if* it was referenced somewhere in
the code. I'm not sure if this was intended but it will be a big problem for
everyone.
-Steve