Ошибка связывания в ржавчине bindgen

Итак, у меня есть библиотека заголовков (каталог файлов.h), которую мне нужно использовать в моем коде ржавчины. Чтобы заставить эту работу работать, я искал различные ящики, чтобы помочь мне добиться этого, и, похоже, bindgen - самый многообещающий вариант. Я следил за документацией по bindgen и создал файлы wrapper.h и build.rs. в файле build.rs я внес в белый список все необходимые функции, а параметр ссылки, упомянутый в документации, указан какprintln! ("cargo:rustc-link-lib=C/complete path to my header files");. однако при сборке груза это не удается с этой ошибкой:

error: linking with link.exe failed: exit code: 1181

для которой я не смог найти решения. Любая помощь или предложения приветствуются.

1 ответ

rustc-link-lib директива предназначена только для .a/.so/.dll и не может работать ни с одним .h или .rsфайлы. Здесь совершенно неуместно.

Если вы сделаете свой build.rs скрипт записывает в каталог, указанный std::env::var("OUT_DIR") path, то код вашей основной библиотеки может включать его динамически с помощью:

include!(concat!(env!("OUT_DIR"), "/temp_file_built_by_build_dot_rs.rs"));

В качестве альтернативы, не беспокойтесь о build.rsвообще. Используйте bindgen из командной строки и включите сгенерированный.rs файл как модуль в вашем проекте (как обычный файл исходного кода).

Другие вопросы по тегам