Hi again, On Thu, May 04, 2023 at 11:19 AM, John Kehayias wrote:
> Thanks for opening this and cc'ing; this has come up with some > frequency on IRC, especially recently. In discussing there today, the > current reasoning is that usually one will just call g++ which knows > how to find libstdc++. So, gcc-toolchain does not include gcc:lib as > part of what it makes available. > I tried locally just adding gcc:lib as an input for gcc-toolchain and that does the trick. And since it is just a union-build, very quick to try out :) guix size reports an increase in gcc-toolchain as 0.1 MiB with gcc:lib included. > I think what we (and when this comes up, others) are getting at are > some edge cases or different use cases where one wants to directly get > at libstdc++. Previously it was more direct to use gcc:lib; of course > one still can in code and/or cli with the proper call. For example, > guix build -e "(@@ (gnu packages gcc) gcc)" will download/build/show > the lib output of the (hidden) gcc package. Though I'm not sure how to > select just the lib output here. > > My use case currently is in the FHS container where a binary wants to > find some libraries directly. Previously one would include the gcc:lib > package output in the guix shell call. Now some of those libraries can > be found elsewhere, like libgccjit, but libstdc++ seems to be the > trickier one. Open to other suggestions/workarounds, or thoughts on if > it is worthwhile to include gcc:lib in the gcc-toolchain package (or > make a gcc-toolchain:lib output?). > I tried with my local gcc-toolchain modification and this gets me what I wanted. On that note, I forgot to bring up the problem I had with using make-libstdc++: it does not seem to build the same libstdc++ as included in the gcc package. The doc string for that procedure notes that this is meant to be used when using non-gcc toolchains, but we also have the libstdc++ variable which seems to suggest that (make-libstdc++ gcc) should be the same library as in gcc. I'm not sure the difference in looking at the package definitions, but I don't really know this stuff. Here's an example of the difference I was finding: I was running something and it complained that --8<---------------cut here---------------start------------->8--- <some-binary> symbol lookup error: <some-binary>: undefined symbol: _ZNSt18condition_variableD1Ev, version GLIBCXX_3.4.11 --8<---------------cut here---------------end--------------->8--- Indeed, looking at the libstdc++ I used via (or could have used libstdc++ here directly since I used the default gcc): --8<---------------cut here---------------start------------->8--- guix shell -e "(begin (use-modules (gnu packages gcc)) (make-libstdc++ gcc))" --8<---------------cut here---------------end--------------->8--- I see --8<---------------cut here---------------start------------->8--- $strings /gnu/store/6897bpw5858bdng744ddqw8rrqjb4frr-libstdc++-11.3.0/lib/libstdc++.so | grep "_ZNSt18condition_variableD1Ev" --8<---------------cut here---------------end--------------->8--- while for gcc:lib it is defined --8<---------------cut here---------------start------------->8--- $ strings /gnu/store/l684qgqlrqkbsh8jffp9d8ag6vrpcwgs-gcc-11.3.0-lib/lib/libstdc++.so | grep "_ZNSt18condition_variableD1Ev" _ZNSt18condition_variableD1Ev --8<---------------cut here---------------end--------------->8--- and using that libstdc++ does not result in that error. Is make-libstdc++ not meant to be used/mixed with e.g. gcc-toolchain? Is this expected that it is a different library produced or is this a bug? Thanks! John