Thread overview | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
March 26, 2018 Building application with LDC and -flto=thin fails in link stage | ||||
---|---|---|---|---|
| ||||
When I try build my application using LDC and -flto=thin it fails in the final linking as ldmd2 -of.dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-9FDE475789CA2E324E9DAE6A959C2B7F/knetquery .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-9FDE475789CA2E324E9DAE6A959C2B7F/knetquery.o ../../.dub/packages/gmp-d-master/gmp-d/.dub/build/library-release-nobounds-lto-linux.posix-x86_64-ldc_2078-0CE08DAF93E48445402E07C3537FA4E6/libgmp-d.a phobos-next/.dub/build/library-release-nobounds-lto-linux.posix-x86_64-ldc_2078-933571CC843E8D13926CEC14051E7195/libknet_phobos-next.a -L--no-as-needed -L-lzstd -L-lgmp -L-lc -L-lreadline -L-lz -L-lbz2 /usr/bin/ld: error: .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-9FDE475789CA2E324E9DAE6A959C2B7F/knetquery.o:1:3: invalid character /usr/bin/ld: error: .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-9FDE475789CA2E324E9DAE6A959C2B7F/knetquery.o:1:3: syntax error, unexpected $end /usr/bin/ld: error: .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-9FDE475789CA2E324E9DAE6A959C2B7F/knetquery.o: not an object or archive /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o:function _start: error: undefined reference to 'main' collect2: error: ld returned 1 exit status Error: /usr/bin/gcc failed with status: 1 FAIL .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-9FDE475789CA2E324E9DAE6A959C2B7F/ knetquery executable ldmd2 failed with exit code 1. What could be wrong? |
March 26, 2018 Re: Building application with LDC and -flto=thin fails in link stage | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Monday, 26 March 2018 at 22:07:49 UTC, Nordlöw wrote:
> When I try build my application using LDC and -flto=thin it fails in the final linking
You must also pass `-flto=thin` during linking (a special plugin is needed for LTO, and LDC will only pass the plugin to the linker when `-flto=` is specified).
I couldn't see `-flto=thin` in your link command, so I suspect that will fix it.
- Johan
|
March 26, 2018 Re: Building application with LDC and -flto=thin fails in link stage | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johan Engelen | On Monday, 26 March 2018 at 22:13:02 UTC, Johan Engelen wrote: > On Monday, 26 March 2018 at 22:07:49 UTC, Nordlöw wrote: >> When I try build my application using LDC and -flto=thin it fails in the final linking > > You must also pass `-flto=thin` during linking (a special plugin is needed for LTO, and LDC will only pass the plugin to the linker when `-flto=` is specified). > I couldn't see `-flto=thin` in your link command, so I suspect that will fix it. > > - Johan I added `lflags` to my dub configuration as buildType "release-nobounds-lto" { buildOptions "releaseMode" "optimize" "inline" "noBoundsCheck" # TODO -march=native -ffast-math dflags "-mcpu=native" "-O3" "-flto=thin" platform="posix-ldc" lflags "-flto=thin" platform="posix-ldc" } forwarded as `-L-flto=thin` but still errors as Linking... ldmd2 -of.dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/knetquery .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/knetquery.o ../../.dub/packages/gmp-d-master/gmp-d/.dub/build/library-release-nobounds-lto-linux.posix-x86_64-ldc_2078-B287F67CE5FF6145BC229790CFB09607/libgmp-d.a phobos-next/.dub/build/library-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F0F2FDB01B8401C04D657BCC145D46A5/libknet_phobos-next.a -L--no-as-needed -L-flto=thin -L-lzstd -L-lgmp -L-lc -L-lreadline -L-lz -L-lbz2 /usr/bin/ld: error: .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/knetquery.o:1:3: invalid character /usr/bin/ld: error: .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/knetquery.o:1:3: syntax error, unexpected $end /usr/bin/ld: error: .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/knetquery.o: not an object or archive /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o:function _start: error: undefined reference to 'main' collect2: error: ld returned 1 exit status Error: /usr/bin/gcc failed with status: 1 FAIL .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/ knetquery executable ldmd2 failed with exit code 1. |
March 27, 2018 Re: Building application with LDC and -flto=thin fails in link stage | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Monday, 26 March 2018 at 22:07:49 UTC, Nordlöw wrote:
> When I try build my application using LDC and -flto=thin it fails in the final linking as
>
According to LDC's Release info:
Known issues:
ThinLTO may not work well with the ld.bfd linker, use ld.gold instead (-linker=gold).
Maybe this is the problem.
Arek
|
March 27, 2018 Re: Building application with LDC and -flto=thin fails in link stage | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Monday, 26 March 2018 at 23:32:59 UTC, Nordlöw wrote:
> forwarded as `-L-flto=thin` but still errors as
Which is wrong, it's not a ld command-line option (i.e., the `-L` prefix is wrong). I don't use dub though, so I don't know how to fix it.
|
March 27, 2018 Re: Building application with LDC and -flto=thin fails in link stage | ||||
---|---|---|---|---|
| ||||
Posted in reply to kinke | On Tuesday, 27 March 2018 at 13:28:08 UTC, kinke wrote: > On Monday, 26 March 2018 at 23:32:59 UTC, Nordlöw wrote: >> forwarded as `-L-flto=thin` but still errors as > > Which is wrong, it's not a ld command-line option (i.e., the `-L` prefix is wrong). Indeed. Please try to manually link first (without dub) by modifying the command on which dub errors: ``` ldmd2 -flto=thin -of.dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/knetquery .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/knetquery.o ../../.dub/packages/gmp-d-master/gmp-d/.dub/build/library-release-nobounds-lto-linux.posix-x86_64-ldc_2078-B287F67CE5FF6145BC229790CFB09607/libgmp-d.a phobos-next/.dub/build/library-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F0F2FDB01B8401C04D657BCC145D46A5/libknet_phobos-next.a -L--no-as-needed -L-lzstd -L-lgmp -L-lc -L-lreadline -L-lz -L-lbz2 ``` -Johan |
March 27, 2018 Re: Building application with LDC and -flto=thin fails in link stage | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johan Engelen | On Tuesday, 27 March 2018 at 22:00:42 UTC, Johan Engelen wrote:
> Indeed.
> Please try to manually link first (without dub) by modifying the command on which dub errors:
>
> ```
> ldmd2 -flto=thin -of.dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/knetquery .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/knetquery.o ../../.dub/packages/gmp-d-master/gmp-d/.dub/build/library-release-nobounds-lto-linux.posix-x86_64-ldc_2078-B287F67CE5FF6145BC229790CFB09607/libgmp-d.a phobos-next/.dub/build/library-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F0F2FDB01B8401C04D657BCC145D46A5/libknet_phobos-next.a -L--no-as-needed -L-lzstd -L-lgmp -L-lc -L-lreadline -L-lz -L-lbz2
> ```
>
> -Johan
Yes, that works!
|
March 28, 2018 Re: Building application with LDC and -flto=thin fails in link stage | ||||
---|---|---|---|---|
| ||||
Posted in reply to Per Nordlöw | On Tuesday, 27 March 2018 at 22:10:33 UTC, Per Nordlöw wrote:
> On Tuesday, 27 March 2018 at 22:00:42 UTC, Johan Engelen wrote:
>> Indeed.
>> Please try to manually link first (without dub) by modifying the command on which dub errors:
>>
>> ```
>> ldmd2 -flto=thin -of.dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/knetquery .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/knetquery.o ../../.dub/packages/gmp-d-master/gmp-d/.dub/build/library-release-nobounds-lto-linux.posix-x86_64-ldc_2078-B287F67CE5FF6145BC229790CFB09607/libgmp-d.a phobos-next/.dub/build/library-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F0F2FDB01B8401C04D657BCC145D46A5/libknet_phobos-next.a -L--no-as-needed -L-lzstd -L-lgmp -L-lc -L-lreadline -L-lz -L-lbz2
>> ```
>>
>> -Johan
>
> Yes, that works!
Good :-)
I'm no dub expert and I don't know how to pass flags to the _compiler_ for the link step.
Would be good to figure that out with the dub folks.
There will be similar problems with using ASan (and fuzzer aswell): `-fsanitize=address` must also be passed to the D compiler (not the linker) during linking such that the correct asan library is linked into the executable.
- Johan
|
March 28, 2018 Re: Building application with LDC and -flto=thin fails in link stage | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johan Engelen | On Wednesday, 28 March 2018 at 16:42:23 UTC, Johan Engelen wrote: > On Tuesday, 27 March 2018 at 22:10:33 UTC, Per Nordlöw wrote: >> On Tuesday, 27 March 2018 at 22:00:42 UTC, Johan Engelen wrote: >>> Indeed. >>> Please try to manually link first (without dub) by modifying the command on which dub errors: >>> >>> ``` >>> ldmd2 -flto=thin -of.dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/knetquery .dub/build/application-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F2904BE3C4DA237C077E5C2B0B23442E/knetquery.o ../../.dub/packages/gmp-d-master/gmp-d/.dub/build/library-release-nobounds-lto-linux.posix-x86_64-ldc_2078-B287F67CE5FF6145BC229790CFB09607/libgmp-d.a phobos-next/.dub/build/library-release-nobounds-lto-linux.posix-x86_64-ldc_2078-F0F2FDB01B8401C04D657BCC145D46A5/libknet_phobos-next.a -L--no-as-needed -L-lzstd -L-lgmp -L-lc -L-lreadline -L-lz -L-lbz2 >>> ``` >>> >>> -Johan >> >> Yes, that works! > > Good :-) > > I'm no dub expert and I don't know how to pass flags to the _compiler_ for the link step. > Would be good to figure that out with the dub folks. > > There will be similar problems with using ASan (and fuzzer aswell): `-fsanitize=address` must also be passed to the D compiler (not the linker) during linking such that the correct asan library is linked into the executable. > > - Johan dub supports dflags and lflags in the config file. lflags are the linker commands. http://code.dlang.org/package-format?lang=sdl#build-settings You can also specify per platform arguments, e.g. dflags "-version=BuildingWithLDCRocks" platform="ldc" (dub even supports the environment variables DFLAGS which dmd doesn't (and of course LFLAGS)) |
March 28, 2018 Re: Building application with LDC and -flto=thin fails in link stage | ||||
---|---|---|---|---|
| ||||
Posted in reply to Seb | On Wednesday, 28 March 2018 at 17:03:07 UTC, Seb wrote:
>
> dub supports dflags and lflags in the config file. lflags are the linker commands.
Please read the thread.
`lflags` is for passing flags to the _linker_ (i.e. those flags are prefixed with -L when passed to the _compiler_)
Here, what's needed is passing flags to the _compiler_ when it is invoked to perform the link step in the build.
-Johan
|
Copyright © 1999-2021 by the D Language Foundation