How to compiler dlang code on Apple M1?

Steven Schveighoffer schveiguy at gmail.com
Sat Dec 3 20:33:59 UTC 2022


On 12/3/22 1:59 PM, zoujiaqing wrote:
> ```
> dub build --compiler=ldc2 --arch=arm64-apple-macos
>      Starting Performing "debug" build using ldc2 for aarch64, 
> arm_hardfloat.
>      Building taggedalgebraic 0.11.22: building configuration [library]
>      Building eventcore 0.9.20+commit.4.g6744ae7: building configuration 
> [cfrunloop]
>      Building server ~master: building configuration [application]
>       Linking server
> ld: warning: ignoring file 
> ../../../.dub/packages/taggedalgebraic-0.11.22/taggedalgebraic/.dub/build/library-debug-posix.osx.darwin-aarch64.arm_hardfloat-ldc_v1.30.0-60F6D8BEA34F8F5E792A98EA27B02D2235262A4E0795062F91FA90871411535D/libtaggedalgebraic.a, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
> ld: warning: ignoring file 
> /opt/homebrew/Cellar/ldc/1.30.0_1/lib/libdruntime-ldc.a, building for 
> macOS-x86_64 but attempting to link with file built for macOS-arm64
> ld: warning: ignoring file 
> .dub/build/application-debug-posix.osx.darwin-aarch64.arm_hardfloat-ldc_v1.30.0-7AC1A4B8AFD7D9F59DB01E667A3DCF19DD437F41E741F5937BDCF58FAE6AA922/server.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
> ld: warning: ignoring file 
> ../../eventcore/.dub/build/cfrunloop-debug-posix.osx.darwin-aarch64.arm_hardfloat-ldc_v1.30.0-ED6AFABD5E24BB6BCED6FD74F2DE88CF39B648360CE187983206459095D4677D/libeventcore.a, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
> ld: warning: ignoring file 
> /opt/homebrew/Cellar/ldc/1.30.0_1/lib/libphobos2-ldc.a, building for 
> macOS-x86_64 but attempting to link with file built for macOS-arm64
> Undefined symbols for architecture x86_64:
>    "_main", referenced from:
>       implicit entry/start for main executable
> ld: symbol(s) not found for architecture x86_64
> clang: error: linker command failed with exit code 1 (use -v to see 
> invocation)
> Error: /usr/bin/cc failed with status: 1
> Error ldc2 failed with exit code 1.
> ```

The issue is dub. Make sure you are using the dub built for ARM.

What Apple does is if any program in the same process group is x86 
specific, then all the executed programs that are universal (including 
the linker) will switch to that mode.

The linker thinks you are building on x86, even though the compiler is 
doing ARM64. I ran into this early on too. Switching to the dub that 
ships with ldc built for ARM solved it!

-Steve


More information about the Digitalmars-d-learn mailing list