Skip to content

x86_64-macos incorrectly includes macOS libs/headers when cross compiling to Linux #11066

@emidoots

Description

@emidoots

Zig Version

0.10.0-dev.1107+7deadf430

Steps to Reproduce

src/main.zig:

const c = @cImport({
    @cInclude("X11/Xlib.h");
});
pub fn main() void {
    _ = c.XFree(null);
}

build.zig:

const std = @import("std");

pub fn build(b: *std.build.Builder) void {
    const target = b.standardTargetOptions(.{});
    const mode = b.standardReleaseOptions();

    const exe = b.addExecutable("tmp", "src/main.zig");
    exe.setTarget(target);
    exe.setBuildMode(mode);
    exe.install();
    exe.linkLibC();
    exe.linkSystemLibrary("X11");
}
brew install libx11
zig build -Dtarget=x86_64-linux-gnu --verbose 

May only reproduce on x86 mac.

Expected Behavior

Zig should not attempt to use macOS headers/libraries when cross compiling to Linux.

Actual Behavior

Zig attempts to link a macOS library, and includes headers likely intended for macOS only, when building a binary for Linux:

/usr/local/bin/zig build-exe /Users/slimsag/Desktop/tmp/src/main.zig -lc -lX11 --cache-dir /Users/slimsag/Desktop/tmp/zig-cache --global-cache-dir /Users/slimsag/.cache/zig --name tmp -target x86_64-linux-gnu -mcpu x86_64 -I /usr/local/Cellar/libx11/1.7.3.1/include -I /usr/local/Cellar/libxcb/1.14_2/include -I /usr/local/Cellar/libxau/1.0.9/include -I /usr/local/Cellar/libxdmcp/1.1.3/include -I /usr/local/Cellar/xorgproto/2021.5/include -L /usr/local/Cellar/libx11/1.7.3.1/lib --enable-cache 
ld.lld: error: undefined symbol: XFree
>>> referenced by main.zig:5
>>>               /Users/slimsag/Desktop/tmp/zig-cache/o/01c3b52bbbabfbd0f8208918be0f4f24/tmp.o:(main.0)
>>> did you mean: _XFree
>>> defined in: /usr/local/Cellar/libx11/1.7.3.1/lib/libX11.a
error: LLDReportedFailure
tmp...The following command exited with error code 1:
/usr/local/bin/zig build-exe /Users/slimsag/Desktop/tmp/src/main.zig -lc -lX11 --cache-dir /Users/slimsag/Desktop/tmp/zig-cache --global-cache-dir /Users/slimsag/.cache/zig --name tmp -target x86_64-linux-gnu -mcpu x86_64 -I /usr/local/Cellar/libx11/1.7.3.1/include -I /usr/local/Cellar/libxcb/1.14_2/include -I /usr/local/Cellar/libxau/1.0.9/include -I /usr/local/Cellar/libxdmcp/1.1.3/include -I /usr/local/Cellar/xorgproto/2021.5/include -L /usr/local/Cellar/libx11/1.7.3.1/lib --enable-cache 
error: the following build command failed with exit code 1:
/Users/slimsag/Desktop/tmp/zig-cache/o/2c392a7290db5827809b38e1a5c90300/build /usr/local/bin/zig /Users/slimsag/Desktop/tmp /Users/slimsag/Desktop/tmp/zig-cache /Users/slimsag/.cache/zig -Dtarget=x86_64-linux-gnu --verbose

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugObserved behavior contradicts documented or intended behavioros-linuxLinuxos-macosmacOSzig build systemstd.Build, the build runner, `zig build` subcommand, package management

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions