The arpa/nameser.h header of musl libc indirectly depends on the endian.h header but fails to explicitely include it to properly define `__BYTE_ORDER` and `__BIG_ENDIAN` prior to declaring the DNS `HEADER` structure. When both the appropriate `__BYTE_ORDER` and `__BIG_ENDIAN` defines are unset, the `#if __BYTE_ORDER == __BIG_ENDIAN` condition in `nameser.h` evaluates to true, causing it to declare a bad (big endian) DNS packet header structure on little endian systems. Work around this musl bug by forcibly passing `-include endian.h` through the `osflags` file. An upstream fix for musl libc has been submitted with http://www.openwall.com/lists/musl/2017/12/04/3 --- a/src/osflags +++ b/src/osflags @@ -27,7 +27,7 @@ cflags) echo '-Dsocklen_t=int'; ;; Linux) - FLAGS="-D_GNU_SOURCE" + FLAGS="-D_GNU_SOURCE -include endian.h" echo $FLAGS; ;; esac