[Help-gnutls] Re: duplicate symbols complaint on Mac OS X 10.5.2

Ludovic Courtès ludo at gnu.org
Wed Mar 19 16:55:16 CET 2008


Simon Josefsson <simon at josefsson.org> writes:

> I have some vague memory about reading that the semantics of 'inline'
> has changed recently.  If you don't mark inline functions static, they
> will be exported as well, because they may be needed in other files.
> That would explain this problem.  I may be remembering incorrectly, but
> it may be that this new behaviour is actually correct.

GMP must be using "extern inline", whose C99 semantics may be different
from the original GCC semantics (though I don't recall the details).

Anyway, I see that GnuTLS is now compiled with `-std=c99', which may be
the reason for the semantic change.  In particular, for libguile, I see
a number of inline-related warnings, which did not show up earlier:

  .../libguile/inline.h:80: warning: C99 inline functions are not supported; using GNU89

This would suggest that GCC was able to automagically detect that
libguile isn't C99-aware, which it failed to do for GMP.

> I can't find this symbol in the GnuTLS sources, so I would suspect it is
> used in Guile?

It's from GMP, the GNU Multiple Precision arithmetic library
(http://gmplib.org), a dependency of Guile.

This should probably be reported as a GMP issue.  GMP should add some
C99 feature tests to adjust its use of "inline"---the easiest solution
being to use the `gnu_inline' attribute, but that won't fix things for
non-GCC C99 compilers.  Same for Guile.

> This reminds me, there is a bunch of warnings about use of inline
> functions in the gnutls-guile code, such as:
> core.c:1335: warning: function ‘set_certificate_file’ can never be inlined because it uses alloca (override using the always_inline attribute)
> core.c:1335: warning: inlining failed in call to ‘set_certificate_file’: function not inlinable

That's a mistake on my side: it shouldn't be inline since it uses
`alloca ()'.

I just pushed the two attached patches to `master' (I'll let you apply
them to whatever other branch may need it :-)).  The first one addresses
your warning, while the second one add `-fgnu89-inline' which should fix
both the warnings I'm seeing here (shown above) and David's compilation

David: can you confirm?  (You don't even have to apply the patch, you
can just try compiling the `guile' directory with
"make CFLAGS=-fgnu89-inline" I think.)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-guile-Don-t-declare-inline-functions-that-use-al.patch
Type: text/x-patch
Size: 1536 bytes
Desc: The first patch
URL: </pipermail/attachments/20080319/7875dd53/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-guile-Compile-with-fgnu89-inline.patch
Type: text/x-patch
Size: 956 bytes
Desc: The second one
URL: </pipermail/attachments/20080319/7875dd53/attachment-0001.bin>

More information about the Gnutls-help mailing list