es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , , , ,

Answer

  1. Avatar for 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 ejecutar cargo 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.

Comments are closed.