Как мне сказать Rust, где искать статическую библиотеку?
Есть ли способ сказать Rust, где искать мою статическую библиотеку? Пример кода
#[link(name = "/this/is/the/path/libfoo.a", kind = "static")]
Если нет, какое изменение конфигурации я могу сделать или в какую папку я помещаю свою библиотеку, чтобы я мог ее использовать?
2 ответа
rustc
вызывает системный компоновщик, который ищет все библиотеки, указанные в #[link(...)]
в каталогах библиотеки. Обычно есть несколько библиотек по умолчанию (например, /lib
а также /usr/lib
в Linux) и многое другое можно указать с помощью флагов компоновщика (rustc
принимает -L
опции, которые он затем передает компоновщику).
Если вы вызываете rustc
напрямую, вы можете использовать -L
возможность добавить дополнительные каталоги библиотеки, которые затем будут переданы компоновщику. Однако если вы используете Cargo, у вас есть еще несколько вариантов:
Cargo добавляет
/target/<profile>/deps
каталог в качестве исходного каталога библиотеки.Ты можешь использовать
cargo rustc
cargo rustc -- -L /path/to/library/directory
Вы можете указать
RUSTFLAGS
переменная окружения:RUSTFLAGS='-L /path/to/library/directory' cargo build
Вы можете использовать скрипт сборки для вывода дополнительных параметров компоновщика
println!("cargo:rustc-link-lib=static=foo"); println!("cargo:rustc-link-search=native=/path/to/foo");
Я думаю, что самый простой способ для вас - добавить собственный скрипт сборки, который будет копировать или создавать символическую ссылку на вашу библиотеку в соответствующем /target/<profile>/deps
каталог.
Чтобы добавить к принятому ответу, у меня сработало следующее:
- под отладочной сборкой, помещая файлы зависимостей в
target/debug/deps
работал; но положить файлы подtarget/debug/native/*
не похоже на работу.
Груз, кажется, только смотреть под target/debug/deps
по умолчанию.
Вы можете бегать с cargo build --verbose
увидеть многословно rustc
команды и используемые параметры. -L
опция определяет дополнительную директорию зависимости ссылки.