Я пытаюсь встроить номер версии в библиотеку.В идеале это должна быть статическая строка C, которая может быть прочитана и не нуждается в дополнительном выделении для чтения номера версии.
Со стороны Rust я использую vergen
для генерации информации о версиях, напримерэто:
pub static VERSION: &str = env!("VERGEN_SEMVER");
, и я хотел бы в конечном итоге что-то вроде
#[no_mangle]
pub static VERSION_C: *const u8 = ... ;
Кажется, есть способ достичь этого с помощью строковых литералов , ноЯ не нашел способ сделать это с помощью строк времени компиляции.Создание нового CString
, по-видимому, выходит за рамки текущих возможностей статических переменных и имеет тенденцию заканчиваться ошибкой E0015 .
Функция, возвращающая указатель, подобный этому, будет приемлемой, если только она не выделяет новую память.
#[no_mangle]
pub extern "C" fn get_version() -> *const u8 {
// ...
}
Окончательный тип переменной (или возвращаемый тип функции)не должен быть основан на u8
, но должен быть переведен через cbindgen
.Если какой-то другой тип FFI более уместен, использовать его вполне нормально.