Re: [patch #9687] bugfix: make -export-dynamic imply --whole-archive

Alex Ameen <[email protected]> Sun, 21 Nov 2021 12:33:44 -0600
Newsgroups gmane.comp.gnu.libtool.patches
Message-ID <[email protected]>
Howdy Bob,

I totally agree with you. `libtool' definitely should not be creating 
solutions that only work with a particular linker in mind, and at a high 
level I think it should ultimately work to provide a sense of 
consistency across a variety of linkers.

In this case my concern is about ease of use for developers who might be 
confused about `libtool', `ld', and other link-editors having options 
with identical names which behave in very different ways. Here we have 
the flags `--whole-archive', `--no-whole-archive', and 
`--export-dynamic' which exist across almost all popular link-editors, 
GNU `ld' ( `ld.bfd' and `ld.gold' ), LLVM's `lld', Solaris' `ld', etc 
which have a consistent behavior. With that in mind I think having the 
flag `-export-dynamic' in `libtool' behave differently from "the norm" 
in discreet ways would likely cause confusion. To my knowledge HP UX and 
AIX are the only two systems which lack these flags ( I believe this is 
actually the type of thing that `libtool' should aim to port to those 
platforms ).

And yeah I agree that convenience libraries are wonky, and that linking 
static archives into dynamic libraries and executables is a tricky task. 
The good news on this front is that this is actually the area of linking 
and loading that I have the most experience in, and I'm familiar with 
many ( but not all ) of the pitfalls that pop up on Linux especially, 
but also with AIX and Windows. The reason I recommended the use of a 
convenience library in this case is because `libtool' already knows to 
use `--whole-archive' and `--no-whole-archive' for these libraries, so 
it is a convenient way to accomplish those goals in existing releases.

I took a look at the option parsing for `libtool --mode=link' in depth 
yesterday and I know why it has trouble handling `--whole-archive' and 
`--no-whole-archive' flags, fixing the issue isn't trivial just because 
of how the parser is written but I plan to get these flags to behave "as 
expected" for folks who are used to this feature in common link-editors.

Overall I think we're on the same page. I understand that `libtool' is 
ultimately intended to provide cross-platform consistency as a 
portability wrapper around each platform's various compilers, linkers, 
and loaders. It is certainly not my intention to promote a specific tool 
or platform over another.

-Alex


On 11/21/21 8:32 AM, Bob Friesenhahn wrote:
> On Sat, 20 Nov 2021, Alex Ameen wrote:
>
>> Thanks for the follow up, this gave me a much clearer idea of the 
>> underlying issue that you're trying to solve. I really do appreciate 
>> you taking the time to help improve `libtool'.
>>
>> You're absolutely right that `libtool' completely bungles the use of 
>> `--whole-archive' and `--no-whole-archive' which I see as a high 
>> priority issue. In several build systems I've built in the past I 
>> have needed to apply manual patches to `libtool' to work around this, 
>> and I plan on merging changes to fix this soon ( I'm taking my time 
>> to create test cases ).
>
> I don't pretend to understand the associated issues, but please take 
> care that libtool does not promote solutions which only work with GNU 
> ld (or linkers designed to perfectly emulate GNU ld) on a limited set 
> of targets.
>
> Libtool is a portability solution to encourage development of software 
> which is able to compile and run on many targets, even if the authors 
> of the software have never experienced those targets.
>
> Linking static libraries into shared libraries is a complex topic and 
> is a reason why libtool offers the clumsy/inefficient "convenience 
> library" mechanism since it assures that the objects were compiled 
> properly to be used in the library they are linked into.
>
> Bob