Неустранимая ошибка "файл 'stdlib.h' не найден" при запуске jextract с привязкой C для проекта Rust.

Я хочу использовать Project Panama jextractинструмент для создания привязки Java к библиотеке Rust. При выполнении следующей команды я получаю сообщение об ошибке:

jextract -C -x -C c++ -I /Library/Developer/CommandLineTools/usr/include/c++/v1 -t adder -o adder.jar bindings.h
java.lang.RuntimeException: /Library/Developer/CommandLineTools/usr/include/c++/v1/stdlib.h:93:15: fatal error: 'stdlib.h' file not found

Я запутался, потому что путь включения содержит stdlib.h:

ls /Library/Developer/CommandLineTools/usr/include/c++/v1/ | grep stdlib                                        
cstdlib
stdlib.h

Ошибка содержит только #include_next <stdlib.h>.

Мой исходный код Rust - это простая функция:

#[no_mangle]
pub extern "C" fn addition(a: u32, b: u32) -> u32 {
    a + b
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn adds() {
        assert_eq!(addition(1, 2), 3);
    }
}

В bindings.h заголовок создается cbindgen ящик:

#include <cstdarg>
#include <cstdint>
#include <cstdlib>
#include <new>

extern "C" {

uint32_t addition(uint32_t a, uint32_t b);

} // extern "C"

Что мне нужно делать для jextract найти stdlib.h?

1 ответ

Это был случай отсутствия пути для включения - мне также нужно было указать расположение файла заголовка MacOS SDK stdlib.h. Это не было ясно из ошибки.

Правильная команда для запуска была:

jextract -C -x -C c++ -I /Library/Developer/CommandLineTools/usr/include/c++/v1 -I /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -t adder -o adder.jar bindings.h
Другие вопросы по тегам