Rust Bindgen: настройка пути включения в окнах
Я новичок в разработке Rust под Windows.
Я пытаюсь привязать библиотеку, libk4a
, как в Windows, так и в Linux. В Linux он устанавливается как libk4a
, под обычными местами, /usr/local/include/k4a/k4a.h
а также /usr/local/lib/libk4a.so
.
Я последовал примеру книги bindgen и сделал wrapper.h
перейти к build.rs
, что просто:
#include <k4a/k4a.h>
Это отлично работает под Linux с build.rs
Установка из
println!("cargo:rustc-link-lib=k4a");
В windows dll находится под C:\Program Files\Azure Kinect SDK v1.3.0\sdk\windows-desktop\amd64\release\bin\
и заголовок на C:\Program Files\Azure Kinect SDK v1.3.0\sdk\include\k4a\k4a.h
Хотя я могу запустить bindgen самостоятельно с
bindgen wrapper.h -- -I "C:\Program Files\Azure Kinect SDK v1.3.0\sdk\include"
Если он попытается добавить путь включения в мои build.rs, как предлагает этот предыдущий ответ:
let bindings = bindgen::Builder::default()
.header("wrapper.h")
.clang_arg("-I \"C:\\Program Files\\Azure Kinect SDK v1.3.0\\sdk\\include\"")
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.generate()
.expect("Unable to generate bindings");
Я все еще получаю сообщение об ошибке, что не удается найти файл заголовка:
wrapper.h:1:10: fatal error: 'k4a/k4a.h' file not found
wrapper.h:1:10: fatal error: 'k4a/k4a.h' file not found, err: true
thread 'main' panicked at 'Unable to generate bindings: ()', build.rs:11:20
Мне не хватает места, чтобы добавить что-нибудь к пути включения? Долженk4a/k4a.h
быть где-нибудь на моем пути? Или у меня в конфиге опечатка? Я не уверен, почему это работает с rawbindgen
в командной строке, но не build.rs
.
1 ответ
На этот вопрос был простой ответ.
Я добавил дополнительный аргумент clang
.clang_arg("-v")
чтобы увидеть путь включения, который получал clang, и я заметил, что он показывает
" C:\Program Files\Azure Kinect SDK v1.3.0\sdk\include\"
В основном перед включаемым путем был пробел. Удаление заставило его работать.