mirror of
https://github.com/rui314/mold.git
synced 2024-09-21 01:47:11 +03:00
Merge pull request #63 from Logarithmus/readme-gcc-guide
README.md: add guide to using mold with GCC via -B option
This commit is contained in:
commit
b044ac844c
15
README.md
15
README.md
@ -84,10 +84,15 @@ $ sudo apt-get install dwarfdump libc6-dev:i386 lib32gcc-10-dev gcc-multilib
|
|||||||
|
|
||||||
On Unix, the linker command (which is usually `/usr/bin/ld`) is
|
On Unix, the linker command (which is usually `/usr/bin/ld`) is
|
||||||
invoked indirectly by `cc` (or `gcc` or `clang`), which is typically
|
invoked indirectly by `cc` (or `gcc` or `clang`), which is typically
|
||||||
in turn indirectly invoked by `make` or some other build system
|
in turn indirectly invoked by `make` or some other build system command.
|
||||||
command. It is sometimes very hard to pass an appropriate command line
|
|
||||||
option to `cc` to specify an alternative linker.
|
|
||||||
|
|
||||||
|
A classic way to use `mold`:
|
||||||
|
- `clang` before 12.0: pass `-fuse-ld=<absolute-path-to-mold-executable>`;
|
||||||
|
- clang after 12.0: pass `--ld-path=<absolute-path-to-mold-executable>`;
|
||||||
|
- gcc: `--ld-path` patch [has been declined by GCC maintainers](https://gcc.gnu.org/pipermail/gcc-patches/2021-June/573833.html), instead they advise to use a [workaround](https://gcc.gnu.org/pipermail/gcc-patches/2021-June/573823.html): create directory `<dirname>`, then `ln -s <path-to-mold> <dirname>/ld`, and then pass `-B<dirname>` (`-B` tells GCC to look for `ld` in specified location).
|
||||||
|
|
||||||
|
It is sometimes very hard to pass an appropriate command line
|
||||||
|
option to `cc` to specify an alternative linker.
|
||||||
To deal with the situation, mold has a feature to intercept all
|
To deal with the situation, mold has a feature to intercept all
|
||||||
invocations of `/usr/bin/ld`, `/usr/bin/ld.lld` or `/usr/bin/ld.gold`
|
invocations of `/usr/bin/ld`, `/usr/bin/ld.lld` or `/usr/bin/ld.gold`
|
||||||
and redirect it to itself. To use the feature, run `make` (or other
|
and redirect it to itself. To use the feature, run `make` (or other
|
||||||
@ -103,10 +108,6 @@ file intercepts all function calls to exec-family functions to replace
|
|||||||
`argv[0]` with `mold` if it is `/usr/bin/ld`, `/usr/bin/ld.gold` or
|
`argv[0]` with `mold` if it is `/usr/bin/ld`, `/usr/bin/ld.gold` or
|
||||||
`/usr/bin/ld.lld`.
|
`/usr/bin/ld.lld`.
|
||||||
|
|
||||||
Alternatively, you can pass `-fuse-ld=<absolute-path-to-mold-executable>`
|
|
||||||
to a linker command line. Since GCC doesn't support that option,
|
|
||||||
I recommend using clang.
|
|
||||||
|
|
||||||
mold leaves its identification string in `.comment` section in an output
|
mold leaves its identification string in `.comment` section in an output
|
||||||
file. You can print it out to verify that you are actually using mold.
|
file. You can print it out to verify that you are actually using mold.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user