Cross-Compilation Basics
Zig includes cross-compilation support out of the box:- No separate toolchain installation required
- Built-in support for all targets
- Consistent behavior across host platforms
- Integrated libc for all targets
Compiling for Different Targets
Command Line
In build.zig
Target Triple Format
Target triples specify:<arch>-<os>-<abi>
Architecture Examples
OS Examples
ABI Examples
Common Cross-Compilation Targets
Linux Targets
Windows Targets
macOS Targets
WebAssembly
Embedded / Bare Metal
CPU Features
Specify CPU features for optimization:In build.zig
lib/std/Build.zig:628-634
Static vs Dynamic Linking
Static Linking
Static executables have no runtime dependencies:Dynamic Linking
Cross-Compiling with C Dependencies
Linking System Libraries
When cross-compiling with system library dependencies:lib/std/Build.zig:336-344
Using Zig’s Bundled libc
C++ Standard Library
Platform-Specific Code
Handle platform differences in your code:Build Script Examples
Multi-Target Release Builds
Conditional Cross-Compilation
Testing Cross-Compiled Binaries
QEMU Integration
Zig can automatically use QEMU to run cross-compiled tests:lib/std/Build.zig:74-75
Wine Integration
For Windows binaries on Linux/macOS:lib/std/Build.zig:80-81
Rosetta Integration
On Apple Silicon, run x86_64 macOS binaries:lib/std/Build.zig:76-77
Target Utilities
Checking Target Capabilities
src/target.zig:13-18
Required libc
src/target.zig:20-25
PIC Requirements
src/target.zig:48-54
Single-Threaded Defaults
src/target.zig:78-88
Best Practices
const is_windows = @import("builtin").os.tag == .windows;
const path_separator = if (is_windows) '\\\\' else '/';
Common Issues and Solutions
Missing libc Headers
Zig bundles libc headers for all targets. If you encounter missing headers, ensure you’re using
exe.root_module.link_libc = true.Undefined Symbols
When linking C libraries, ensure you’re linking all required dependencies:Static Linking Issues
Some libraries don’t support static linking. Use musl ABI for better static linking support:Backend Support
Different backends support different targets:src/target.zig:147-234
See Also
- Build Targets - Complete target configuration reference
- Build System - Build system overview