cc-wrapper: fix linking against GCC libs for non-GCC#192459
Merged
Artturin merged 1 commit intoNixOS:stagingfrom Sep 6, 2023
Merged
cc-wrapper: fix linking against GCC libs for non-GCC#192459Artturin merged 1 commit intoNixOS:stagingfrom
Artturin merged 1 commit intoNixOS:stagingfrom
Conversation
Currently, clang++ statically links against libstdc++ instead of dynamically links, because the -L path included in the cc-wrapper is incorrect. The gccForLibs.lib output only contains the architecture subdirectory if the target and host platform are not the same. (See targetConfig set in gcc/<version>/default.nix and the gcc/builder.nix) This fixes the incorrect linking by using the correct path for both the cross and native cases. This also matches the cc_solib set above in cc-wrapper/default.nix Tested by compiling a simple cpp binary and noting that it now correctly dynamically links against libstdc++, natively on x86_64 and arm64, as well as x86_64 -> arm64 cross compilation. Co-Authored-By: Sebastian Ullrich <sebasti@nullri.ch>
11 tasks
Artturin
approved these changes
Sep 6, 2023
Member
Artturin
left a comment
There was a problem hiding this comment.
$ nix shell .#clang -c c++ foo.cpp && ldd a.out | grep libstd
libstdc++.so.6 => /nix/store/5xprvzsxa8b1qlzy4yc9kgws1zwrnqjq-gcc-12.3.0-lib/lib/libstdc++.so.6 (0x00007ff21e896000)
Member
|
|
Contributor
|
Successfully created backport PR for |
1 task
13 tasks
13 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Currently, clang++ statically links against libstdc++ instead of dynamically links, because the -L path included in the cc-wrapper is incorrect. The gccForLibs.lib output only contains the architecture subdirectory if the target and host platform are not the same. (See targetConfig set in gcc//default.nix and the gcc/builder.nix)
This fixes the incorrect linking by using the correct path for both the cross and native cases. This also matches the cc_solib set above in cc-wrapper/default.nix
Tested by compiling a simple cpp binary and noting that it now correctly dynamically links against libstdc++, natively on x86_64 and arm64, as well as x86_64 -> arm64 cross compilation.
Co-Authored-By: Sebastian Ullrich
<sebasti@nullri.ch>This is based on #133512 (Closes #133512) (thanks @Kha), except it also works correctly in the cross-compilation case. That PR had been left unreviewed for a while, and this issue ought to get fixed, since it is currently incorrect for a central usage of clang in nixpkgs (dynamically linking against libstdc++). CC @Ericson2314 @dtzWill @primeos
Description of changes
Things done
sandbox = trueset innix.conf? (See Nix manual)nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage./result/bin/)nixos/doc/manual/md-to-db.shto update generated release notes