libtool-patches
[Top][All Lists]
Advanced

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

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


From: Alex Ameen
Subject: Re: [patch #9687] bugfix: make -export-dynamic imply --whole-archive
Date: Sun, 21 Nov 2021 12:33:44 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.12.0

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]