rust 如何在配置时检测某个函数是否在库中可用?

jhkqcmku  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(104)

某些库根据目标平台的不同而不一致地公开函数和类型。特别是libcnix做到了这一点。
如何在配置时检测到crate是否提供了某些功能(如libc::mmap64libc::posix_fallocate)?
我知道我不能基于库导出的常量值#[cfg()],库也不能向用户导出配置选项。我想我必须使用build.rs来检测它,但我不确定如何检测。

mm5n2pyu

mm5n2pyu1#

RFC #2523指定了一个符号#[cfg(accessible(path))],它可以用来做一些你想要的事情(以及其他事情):#[cfg(accessible(libc::mmap64))]只有在libc::mmap64()可以访问时才会打开。
然而,这个RFC目前还没有完全实现。也就是说,由于技术上的困难,#[cfg(accessible)]的部分不是。
然而,PR #69870实现了类似的东西:#[cfg_accessible(path)]
然而,根据我的测试,我不确定它是否真的适用于这种情况,而且,它不能与cfg操作结合使用-这意味着例如。它不能被否定:你不能实现一些逻辑,当某些东西 * 是 * 不可用。
因此,最好的办法是为实现此功能的平台选择#[cfg()]。这是每个人都在做的事。

相关问题