Zig no macOS — Resolver Problemas Específicos
O Zig funciona bem no macOS, tanto em Intel quanto em Apple Silicon. Aqui estão os problemas mais comuns e suas soluções.
Erro: “Xcode Command Line Tools not found”
Sintoma: Zig não consegue encontrar headers do sistema ou linker.
# Instalar Xcode Command Line Tools
xcode-select --install
# Verificar se está instalado
xcode-select -p
# Deve mostrar: /Library/Developer/CommandLineTools
# Se precisar resetar:
sudo xcode-select --reset
Problema: Apple Silicon vs Intel
# Verificar arquitetura do seu Mac
uname -m
# arm64 = Apple Silicon (M1/M2/M3/M4)
# x86_64 = Intel
# Verificar arquitetura do Zig instalado
file $(which zig)
# Instalar a versão correta
# Apple Silicon:
# Baixar zig-macos-aarch64-*.tar.xz
# Intel:
# Baixar zig-macos-x86_64-*.tar.xz
# Via Homebrew (detecta automaticamente)
brew install zig
Erro: “SDK not found”
# Verificar SDKs disponíveis
xcrun --show-sdk-path
# Se não encontrar:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
# Ou para Command Line Tools apenas:
sudo xcode-select -s /Library/Developer/CommandLineTools
Problema: Code Signing
Sintoma: O binário gerado não executa, mostra erro de segurança.
# macOS pode bloquear binários não assinados
# Solução: assinar ad-hoc
codesign -s - ./zig-out/bin/meu-app
# Para executar mesmo sem assinatura:
# System Preferences > Security & Privacy > Allow
Em binários distribuídos, considere code signing adequado com Developer ID.
Problema: Frameworks do macOS
// No build.zig — linkar com frameworks do macOS
const target = b.standardTargetOptions(.{});
if (target.result.os.tag == .macos) {
exe.linkFramework("CoreFoundation");
exe.linkFramework("Security");
exe.linkFramework("SystemConfiguration");
}
// Usar frameworks C do macOS via cImport
const c = @cImport({
@cInclude("CoreFoundation/CoreFoundation.h");
});
Problema: Biblioteca C Não Encontrada
# Verificar se a biblioteca está instalada via Homebrew
brew list openssl
# Encontrar o caminho
brew --prefix openssl
# /opt/homebrew/opt/openssl (Apple Silicon)
# /usr/local/opt/openssl (Intel)
// No build.zig — adicionar caminhos do Homebrew
const target = b.standardTargetOptions(.{});
if (target.result.os.tag == .macos) {
// Apple Silicon
exe.addIncludePath(.{ .cwd_relative = "/opt/homebrew/include" });
exe.addLibraryPath(.{ .cwd_relative = "/opt/homebrew/lib" });
// Para biblioteca específica
exe.addIncludePath(.{ .cwd_relative = "/opt/homebrew/opt/openssl/include" });
exe.addLibraryPath(.{ .cwd_relative = "/opt/homebrew/opt/openssl/lib" });
}
exe.linkSystemLibrary("ssl");
exe.linkSystemLibrary("crypto");
exe.linkLibC();
Problema: dyld: Library Not Loaded
Sintoma: O binário compila mas não executa.
# Ver dependências dinâmicas
otool -L ./zig-out/bin/meu-app
# Se uma dylib não é encontrada:
# Opção 1: Compilar estaticamente
# Opção 2: Definir DYLD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_LIBRARY_PATH
# Opção 3: Usar install_name_tool
install_name_tool -change old_path new_path ./zig-out/bin/meu-app
Problema: Universal Binary (Fat Binary)
Para distribuir um app que funciona em Intel e Apple Silicon:
# Compilar para ambas as arquiteturas
zig build -Dtarget=x86_64-macos
mv zig-out/bin/meu-app meu-app-x86_64
zig build -Dtarget=aarch64-macos
mv zig-out/bin/meu-app meu-app-arm64
# Criar universal binary
lipo -create meu-app-x86_64 meu-app-arm64 -output meu-app-universal
Problema: LLDB para Debug no macOS
# macOS usa LLDB por padrão (GDB requer assinatura especial)
lldb ./zig-out/bin/meu-app
(lldb) run
(lldb) bt # backtrace
(lldb) frame variable # variáveis locais
(lldb) p variavel # print variável
(lldb) breakpoint set --file main.zig --line 42
Problema: Permissões do Gatekeeper
# Se o macOS bloqueia o binário do Zig baixado
# Remover atributo de quarentena:
xattr -d com.apple.quarantine /caminho/para/zig
# Ou para toda a pasta:
xattr -dr com.apple.quarantine /caminho/para/zig-dir/
Homebrew: Zig Desatualizado
# Atualizar Zig via Homebrew
brew update && brew upgrade zig
# Se precisa de versão específica
brew install zig@0.13
# Verificar versão
zig version
Cross-Compile do macOS para Linux
# Compilar para Linux a partir do macOS
zig build -Dtarget=x86_64-linux-gnu
zig build -Dtarget=aarch64-linux-gnu
# Testar com Docker
docker run -v $(pwd)/zig-out/bin:/app ubuntu /app/meu-app
Veja Também
- Instalação — Instalar Zig no macOS
- Cross-Compile Falha — Compilação cruzada
- Linkar Biblioteca C — Problemas de linkagem
- VS Code e ZLS — Editor no macOS
- FAQ Build System — Configuração de build