¿Es posible hacer que cargo instale las dependencias de los archivos DLL de tipo cdylib al instalar?
Estoy en Windows y tengo
una biblioteca Rust cdylib
[paquete]
nombre = “test1dll”
[librería]
tipo-creador = [“cdylib”]
y un binario Rust que depende de esa dll
[paquete]
nombre = “test1”
[dependencias]
test1dll = { ruta = “…” }
y estoy buscando una forma de hacer
cargo install
instalar tanto el test1.exe como el test1dll.dll, o si no es posible con cargo, una alternativa no muy complicada.
La biblioteca necesita ser una dll para poder cargarla con LoadLibrary. Una biblioteca estática no funcionará.
Puedo ver el binario y la dll en el directorio target/*/deps, pero cargo install solo instala el ejecutable.
Ejecutar cargo install desde el proyecto de la dll en sí da un
error: no se encontraron paquetes con binarios o ejemplos.
lo cual coincide con la documentación:
Este comando administra el conjunto local de paquetes binarios instalados por Cargo.
Solo se pueden instalar paquetes que tengan objetivos ejecutables [[bin]] o [[example]].
pero como es un escenario útil desplegar un binario junto con una dll en Windows y Rust incluso ofrece la posibilidad de compilar objetivos cdylib en dll, me pregunto si hay alguna forma de hacer esto con cargo. Desafortunadamente, soy nuevo en Rust y tal vez esté buscando con las palabras clave incorrectas.
Pensé que esto podría acercarse, pero el tiempo de ejecución está excluido explícitamente:
Nótese que cargo solo suministra estas dependencias al construir su creación. Si su programa o biblioteca requiere artefactos en tiempo de ejecución, todavía necesitará manejar eso usted mismo por otros medios.
Y o lo uso incorrectamente o cdylib-plugin también no ayuda con la instalación de la dll.
davy.ai
Solución
Desafortunadamente, al parecer no hay una forma sencilla de hacer que
cargo install
instale tanto el binario como la dll. Una solución alternativa podría ser utilizar un script por lotes para copiar tanto el binario como la dll a una ubicación deseada después de ejecutarcargo install
.Otra solución potencial podría ser empaquetar el binario y la dll juntos en un archivo zip o instalador único utilizando una herramienta como Inno Setup, y distribuir eso en lugar de depender de
cargo install
.Sin embargo, es importante tener en cuenta que este problema está siendo discutido y trabajado activamente por la comunidad de Rust, por lo que es posible que una mejor solución esté disponible en un futuro cercano.