Re: C library promoted to C++ linkage due to optional C++ source module

Bob Friesenhahn <[email protected]>
Newsgroups gmane.comp.sysutils.automake.general
Message-ID <[email protected]>
> Hi Bob,
>
>      It is my opinion that if a library or program
>      is linked with C++ libraries (and especially if it is a static build!)
>      that it should be linked using the C++ linker.  Likewise, if a library
>      or program does not depend on, or contain any C++ code, it should be
>      linked with the C linker.
>
> I surely agree, in principle. But that doesn't mean I have the faintest
> idea what to change in Automake to make that be the case. You probably
> know better than me :). Can you provide (as simple as possible) test cases?

I have since backed away from this approach because I saw that the 
clever way that Automake handles conditionals is not going to be smart 
enough to make language decisions based on if a file is added or 
removed.  The compiler/linker type to use is already baked into 
Makefile.in and the choice used is also based on the optional source 
files.  If a C++ file appears, the language is promoted from C to C++ 
(--tag=CXX) and is baked into Makefile.in.

I see code like this appearing in Makefile.in:

Magick___lib_libGraphicsMagick___la_LINK = $(LIBTOOL) $(AM_V_lt) \
     --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
     $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
     $(Magick___lib_libGraphicsMagick___la_LDFLAGS) $(LDFLAGS) -o \
     $@

As such, it seems that this would be a major feature request and 
significant redesign, and is not a simple bug.

I may be possible to replace this Makefile hunk as an override, but it 
may not be reliable.

It does seem important to link with the C++ compiler when depending on 
C++ libraries, but modern Linux apparently works "fine" if you don't.

>      I have a continuing problem that when libtool tests
>
> [email protected] for that one, I think ... --best, karl.
There is a bug open already in libtool for the issue with dropping -lm 
when mixing C and C++.  It is not clear that the C++ linker provides -lm 
by default since it seemed to be pulled in by implicit dependencies as 
part of the libraries implementation.

Bob

-- 
Bob Friesenhahn
[email protected], http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer,    http://www.GraphicsMagick.org/
Public Key,     http://www.simplesystems.org/users/bfriesen/public-key.txt
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.