Docker环境编译CnosDB Meta组件出现类型不匹配错误求助
编译CnosDB Meta组件时类型不匹配错误的解决方案
执行以下构建命令时触发编译错误:
sudo docker build -f ./docker/Dockerfile_meta .
错误详情:
... Compiling datafusion-proto v22.0.0 (https://github.com/cnosdb/arrow-datafusion.git?branch=22.0.0#fb2cd91e) Compiling models v2.3.0 (/cnosdb/common/models) error[E0308]: mismatched types --> common/models/src/meta_data.rs:350:26 | 350 | libc::statfs(c_storage_path.as_ptr() as *const i8, statfs.as_mut_ptr()) | ------------ expected `*const u8`, found `*const i8` | | | arguments to this function are incorrect | = note: expected raw pointer `*const u8` found raw pointer `*const i8` note: function defined here --> /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/libc-0.2.142/src/unix/linux_like/mod.rs:1683:12 | 1683 | pub fn statfs(path: *const ::c_char, buf: *mut statfs) -> ::c_int; | ^^^^^^ For more information about this error, try `rustc --explain E0308`. error: could not compile `models` (lib) due to previous error warning: build failed, waiting for other jobs to finish... The command '/bin/sh -c cargo build --release --workspace --bin cnosdb-meta' returned a non-zero code: 101
问题原因
libc::statfs的第一个参数要求是*const libc::c_char,当前构建环境中libc::c_char被定义为u8,但代码里将路径指针强制转换为了*const i8,导致类型不匹配。
解决方案
修正类型转换代码:打开
common/models/src/meta_data.rs文件,定位到第350行,将类型转换改为匹配libc::c_char的类型:libc::statfs(c_storage_path.as_ptr() as *const libc::c_char, statfs.as_mut_ptr())也可以直接转换为
*const u8:libc::statfs(c_storage_path.as_ptr() as *const u8, statfs.as_mut_ptr())统一libc依赖版本:检查项目
Cargo.toml中libc的依赖版本,确保与构建环境使用的v0.2.142一致,避免版本差异导致的类型定义变化。
内容的提问来源于stack exchange,提问作者bfr
相关产品推荐
相关产品推荐

