Я создаю обертку Rust вокруг библиотеки C. Я поместил библиотеки C в каталоге lib
и я использую build.rs
сказать компилятору, где найти библиотеки, чтобы связать с:Как сделать поиск rustc-link относительно местоположения проекта?
println!("cargo:rustc-link-lib=static=wrapped-lib");
println!(r"cargo:rustc-link-search=lib\");
Это прекрасно работает, когда я построить библиотеку, но ниже по течению библиотеки, которые зависят на обертке библиотеки получили отказы компиляции:
error: could not find native static library `wrapped-lib`, perhaps an -L flag is missing?
проблема, кажется, с:
println!(r"cargo:rustc-link-search=lib\");
When compilin Клиентская библиотека га, это не указывает на repository\checked_out_project\lib
, но вместо этого, кажется, глядя на местном уровне, так как указав абсолютный путь в зависимости работы:
println!(r"cargo:rustc-link-search=C:\users\id\.cargo\..\lib\");
Я также поручил Cargo включить каталог lib
в обертке-Lib следующим образом:
include = ["lib/**/*"]
Как сообщить компилятору, что он выглядит относительно зависимости, а не создаваемого проекта? Я думал, что это должно работать:
println!(r"cargo:rustc-link-search=lib\");
Этот вызов 'display' кажется неудачным. Интересно, есть ли способ избежать этого ... – Shepmaster
@Shepmaster Если Cargo не разбирает скрипт скрипта сборки как необработанные двоичные данные, это не имеет значения. Чтобы избежать «отображения», вам также необходимо избегать всех стандартных форматирования и вывода на основе строк. –
Я имею в виду, я уверен, что авторы Cargo беседовали с авторами Rust (потому что они одни и те же люди), а авторы Rust - это те, кто создал «Path» и «PathBuf», чтобы быть отделенными от '& str' и' String'. Я бы надеялся (но не задерживал бы дыхание), что Cargo делает немного сложнее. Вам не пришлось бы оставлять все правильное форматирование, хотя бы для переменных, которые в нем нуждались. Также жаль, что нет никакой очевидной «паники», если путь не может быть отображен в формате, что может вызвать любые ошибки, которые я переживаю, чтобы произойти очевидным образом. – Shepmaster