Re: gcc 10: Default to -fno-common, multiple definitions of

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Users]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux