Linking libMacportsLegacySupport privately?
Chris Jones
jonesc at hep.phy.cam.ac.uk
Fri Mar 28 09:40:55 UTC 2025
On 27/03/2025 10:08 pm, Fred Wright wrote:
>
> On Thu, 27 Mar 2025, Chris Jones via macports-dev wrote:
>> On 27/03/2025 12:35 pm, René J.V. Bertin wrote:
>>> Hi,
>>>
>>> I've been experimenting with libc++ 17 which is a prerequisite to
>>> using GCC13+ with libc++ instead of libstdc++ .
>>>
>>> I kept the static legacy-support library linking (may have had to,
>>> can't remember that) and just now realise that all the functions from
>>> that archive (or at least the from the modules that get pulled in)
>>> are exported by libc++ .
>
> That's probably a bad idea. ISTR a post from Ken regarding compiler
> uses of legacy-support being statically linked, but that was to avoid
> circular dependencies. There may have been some circular dependency
> issues at one time, due to legacy-support's being constrained to
> MacPorts compilers in some cases by the cxx_stdlib setting, but I fixed
> that over a year ago. Nowadays, legacy-support is completely dependency-
> free except for needing apple-gcc42 to build on 10.4, and static linking
> should be avoided as much as possible.
>
>> which libc++ in particular are you talking about here ? For sure the
>> system libc++ will never export anything from legacysupport.
>
> I presume that "libc++ instead of libstdc++" means that it's not
> referring to a system libc++.
>
>> The libc++ versions as provided by the MacPorts clang ports might well
>> include some symbols from legacysupport, as its use is required to
>> build these compilers on old systems. I don't thunk hiding these
>> symbols in these versions is at all a good idea.
>
> A proper compiler should make a proper distinction between host
> requirements and target requirements, though I wouldn't put it past GCC
> to get that wrong. What the compiler needs to build and run should be
> completely independent from what its target needs.
>
> If libc++ is statically linked with legacy-support, then it will of course
> contain any legacy-support symbols that it references. If it's
> dynamically linked, then it won't unless it's been explicitly configured
> to do so.
They intentionally link statically.
https://github.com/macports/macports-ports/blob/master/lang/llvm-20/Portfile#L15
>
> Fred Wright
More information about the macports-dev
mailing list