The following error is observed when building the C examples on Fedora 44 (clang 22) and Ubuntu 26.04 (clang 21):
root@scuffed-ubuntu:/host-share/432670/libbpf-bootstrap# git reset --hard --recurse-submodules
HEAD is now at 3859543 build(deps): bump libbpf-rs from 0.26.0 to 0.26.2 in /examples/rust
root@scuffed-ubuntu:/host-share/432670/libbpf-bootstrap# cd examples/c
root@scuffed-ubuntu:/host-share/432670/libbpf-bootstrap/examples/c# make
LIB libbpf.a
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/bpf.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/btf.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf.o
libbpf.c: In function 'kallsyms_cb':
libbpf.c:8191:13: error: assignment discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
8191 | res = strstr(sym_name, ".llvm.");
| ^
libbpf.c: In function 'avail_kallsyms_cb':
libbpf.c:11470:31: error: assignment discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
11470 | if (!(sym_sfx = strstr(sym_name, ".llvm.")))
| ^
libbpf.c: In function 'resolve_full_path':
libbpf.c:12072:35: error: assignment discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
12072 | next_path = strchr(s, ':');
| ^
At top level:
cc1: note: unrecognized command-line option '-Wno-unknown-warning-option' may have been intended to silence earlier diagnostics
cc1: all warnings being treated as errors
make[1]: *** [Makefile:137: /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf.o] Error 1
make: *** [Makefile:87: /host-share/432670/libbpf-bootstrap/examples/c/.output/libbpf.a] Error 2
root@scuffed-ubuntu:/host-share/432670/libbpf-bootstrap/examples/c# clang --version
Ubuntu clang version 21.1.8 (6ubuntu1)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-21/bin
root@scuffed-ubuntu:/host-share/432670/libbpf-bootstrap/examples/c#
The build works fine on Ubuntu 24.04 (clang 18):
root@scuffed-noble:/host-share/432670/libbpf-bootstrap# cd examples/c/
root@scuffed-noble:/host-share/432670/libbpf-bootstrap/examples/c# make
LIB libbpf.a
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf_errno.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/netlink.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/nlattr.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/str_error.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf_probes.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/bpf_prog_linfo.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/btf_dump.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/hashmap.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/ringbuf.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/strset.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/linker.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/gen_loader.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/relo_core.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/usdt.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/zip.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/elf.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/features.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/btf_iter.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/btf_relocate.o
AR /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/libbpf.a
INSTALL bpf.h libbpf.h btf.h libbpf_common.h libbpf_legacy.h bpf_helpers.h bpf_helper_defs.h bpf_tracing.h bpf_endian.h bpf_core_read.h skel_internal.h libbpf_version.h usdt.bpf.h
INSTALL /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/libbpf.pc
INSTALL /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/libbpf.a
BPF .output/minimal.bpf.o
GEN-SKEL .output/minimal.skel.h
CC .output/minimal.o
BINARY minimal
BPF .output/minimal_legacy.bpf.o
GEN-SKEL .output/minimal_legacy.skel.h
CC .output/minimal_legacy.o
BINARY minimal_legacy
BPF .output/minimal_ns.bpf.o
GEN-SKEL .output/minimal_ns.skel.h
CC .output/minimal_ns.o
BINARY minimal_ns
BPF .output/bootstrap.bpf.o
GEN-SKEL .output/bootstrap.skel.h
CC .output/bootstrap.o
BINARY bootstrap
BPF .output/bootstrap_legacy.bpf.o
GEN-SKEL .output/bootstrap_legacy.skel.h
CC .output/bootstrap_legacy.o
BINARY bootstrap_legacy
BPF .output/uprobe.bpf.o
GEN-SKEL .output/uprobe.skel.h
CC .output/uprobe.o
BINARY uprobe
BPF .output/kprobe.bpf.o
GEN-SKEL .output/kprobe.skel.h
CC .output/kprobe.o
BINARY kprobe
BPF .output/fentry.bpf.o
GEN-SKEL .output/fentry.skel.h
CC .output/fentry.o
BINARY fentry
BPF .output/usdt.bpf.o
GEN-SKEL .output/usdt.skel.h
CC .output/usdt.o
BINARY usdt
BPF .output/sockfilter.bpf.o
GEN-SKEL .output/sockfilter.skel.h
CC .output/sockfilter.o
BINARY sockfilter
BPF .output/tc.bpf.o
GEN-SKEL .output/tc.skel.h
CC .output/tc.o
BINARY tc
BPF .output/ksyscall.bpf.o
GEN-SKEL .output/ksyscall.skel.h
CC .output/ksyscall.o
BINARY ksyscall
BPF .output/task_iter.bpf.o
GEN-SKEL .output/task_iter.skel.h
CC .output/task_iter.o
BINARY task_iter
BPF .output/lsm.bpf.o
GEN-SKEL .output/lsm.skel.h
CC .output/lsm.o
BINARY lsm
root@scuffed-noble:/host-share/432670/libbpf-bootstrap/examples/c# clang --version
Ubuntu clang version 18.1.3 (1ubuntu1)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
root@scuffed-noble:/host-share/432670/libbpf-bootstrap/examples/c#
A workaround is to append -Wno-discarded-qualifiers to CFLAGS:
root@scuffed-ubuntu:/host-share/432670/libbpf-bootstrap/examples/c# CFLAGS+=-Wno-discarded-qualifiers make
MKDIR .output
MKDIR .output/libbpf
LIB libbpf.a
MKDIR /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/bpf.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/btf.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf.o
libbpf.c: In function 'kallsyms_cb':
libbpf.c:8191:13: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
8191 | res = strstr(sym_name, ".llvm.");
| ^
libbpf.c: In function 'avail_kallsyms_cb':
libbpf.c:11470:31: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
11470 | if (!(sym_sfx = strstr(sym_name, ".llvm.")))
| ^
libbpf.c: In function 'resolve_full_path':
libbpf.c:12072:35: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
12072 | next_path = strchr(s, ':');
| ^
At top level:
cc1: note: unrecognized command-line option '-Wno-unknown-warning-option' may have been intended to silence earlier diagnostics
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf_errno.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/netlink.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/nlattr.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/str_error.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf_probes.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/bpf_prog_linfo.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/btf_dump.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/hashmap.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/ringbuf.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/strset.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/linker.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/gen_loader.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/relo_core.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/usdt.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/zip.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/elf.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/features.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/btf_iter.o
CC /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/btf_relocate.o
AR /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/libbpf.a
INSTALL bpf.h libbpf.h btf.h libbpf_common.h libbpf_legacy.h bpf_helpers.h bpf_helper_defs.h bpf_tracing.h bpf_endian.h bpf_core_read.h skel_internal.h libbpf_version.h usdt.bpf.h
INSTALL /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/libbpf.pc
INSTALL /host-share/432670/libbpf-bootstrap/examples/c/.output//libbpf/libbpf.a
MKDIR bpftool
BPFTOOL bpftool/bootstrap/bpftool
... libbfd: [ OFF ]
... clang-bpf-co-re: [ on ]
... llvm: [ on ]
... libcap: [ OFF ]
mkdir -p /host-share/432670/libbpf-bootstrap/examples/c/.output/bpftool/bootstrap/libbpf/include/bpf
mkdir -p /host-share/432670/libbpf-bootstrap/examples/c/.output/bpftool/bootstrap/
mkdir -p /host-share/432670/libbpf-bootstrap/examples/c/.output/bpftool/bootstrap/libbpf/
MKDIR /host-share/432670/libbpf-bootstrap/examples/c/.output/bpftool/bootstrap/libbpf/staticobjs
CC /host-share/432670/libbpf-bootstrap/examples/c/.output/bpftool/bootstrap/libbpf/staticobjs/bpf.o
bpf.c: In function 'alloc_zero_tailing_info':
bpf.c:219:23: warning: comparison of integer expressions of different signedness: 'int' and '__u32' {aka 'unsigned int'} [-Wsign-compare]
219 | for (i = 0; i < cnt; i++) {
| ^
At top level:
cc1: note: unrecognized command-line option '-Wno-unknown-warning-option' may have been intended to silence earlier diagnostics
CC /host-share/432670/libbpf-bootstrap/examples/c/.output/bpftool/bootstrap/libbpf/staticobjs/btf.o
btf.c: In function 'btf_type_by_id':
btf.c:625:21: warning: comparison of integer expressions of different signedness: '__u32' {aka 'unsigned int'} and 'int' [-Wsign-compare]
625 | if (type_id < btf->start_id)
| ^
btf.c: In function 'determine_ptr_size':
btf.c:672:31: warning: comparison of integer expressions of different signedness: 'int' and 'long unsigned int' [-Wsign-compare]
672 | for (j = 0; j < ARRAY_SIZE(long_aliases); j++) {
| ^
btf.c: In function 'btf_ptr_sz':
btf.c:685:51: warning: operand of '?:' changes signedness from 'int' to 'long unsigned int' due to unsignedness of other operand [-Wsign-compare]
685 | return btf->ptr_sz < 0 ? sizeof(void *) : btf->ptr_sz;
| ^~~~~~~~~~~
btf.c: In function 'btf_parse_raw':
btf.c:1266:35: warning: comparison of integer expressions of different signedness: 'size_t' {aka 'long unsigned int'} and 'long int' [-Wsign-compare]
1266 | if (fread(data, 1, sz, f) < sz) {
| ^
btf.c: In function 'btf_get_raw_data':
btf.c:1442:31: warning: comparison of integer expressions of different signedness: 'int' and '__u32' {aka 'unsigned int'} [-Wsign-compare]
1442 | for (i = 0; i < btf->nr_types; i++) {
| ^
btf.c: In function 'btf__str_by_offset':
btf.c:1489:20: warning: comparison of integer expressions of different signedness: '__u32' {aka 'unsigned int'} and 'int' [-Wsign-compare]
1489 | if (offset < btf->start_str_off)
| ^
btf.c: In function 'validate_type_id':
btf.c:2004:26: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
2004 | if (id < 0 || id > BTF_MAX_NR_TYPES)
| ^
btf.c: In function 'btf_dedup_clear_hypot_map':
btf.c:3337:23: warning: comparison of integer expressions of different signedness: 'int' and 'size_t' {aka 'long unsigned int'} [-Wsign-compare]
3337 | for (i = 0; i < d->hypot_cnt; i++)
| ^
[warnings continue but build completes successfully]
BINARY tc
BPF .output/ksyscall.bpf.o
GEN-SKEL .output/ksyscall.skel.h
CC .output/ksyscall.o
BINARY ksyscall
BPF .output/task_iter.bpf.o
GEN-SKEL .output/task_iter.skel.h
CC .output/task_iter.o
BINARY task_iter
BPF .output/lsm.bpf.o
GEN-SKEL .output/lsm.skel.h
CC .output/lsm.o
BINARY lsm
root@scuffed-ubuntu:/host-share/432670/libbpf-bootstrap/examples/c# clang --version
Ubuntu clang version 21.1.8 (6ubuntu1)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-21/bin
The following error is observed when building the C examples on Fedora 44 (clang 22) and Ubuntu 26.04 (clang 21):
The build works fine on Ubuntu 24.04 (clang 18):
A workaround is to append -Wno-discarded-qualifiers to CFLAGS: