Zig no macOS — Resolver Problemas Específicos

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

Continue aprendendo Zig

Explore mais tutoriais e artigos em português para dominar a linguagem Zig.