Rust Bindgen: настройка включающего пути на windows - PullRequest
0 голосов
/ 27 января 2020

Я новичок в разработке 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 быть на моем пути где-нибудь? Или у меня есть опечатка в моем конфиге? Я не уверен, почему он работает с raw bindgen в командной строке, но не build.rs.

1 Ответ

0 голосов
/ 28 января 2020

На этот вопрос был простой ответ.

Я добавил дополнительный аргумент clang

.clang_arg("-v")

, чтобы увидеть путь включения, который получал clang, и я заметил, что он показывает

" C:\Program Files\Azure Kinect SDK v1.3.0\sdk\include\"

По существу, перед включаемым путем был пробел. Удаление заставило его работать.

...