Pensé que el compilador de óxido usa enlaces estáticos e incluye todas las bibliotecas dependientes en el momento de la compilación (por lo tanto, el tamaño del ejecutable).
Pero cuando intenté usar el binario compilado en una imagen de scratch de docker con actix, el cliente mysql y diesel con la función mysql habilitada, aparece este error:
error while loading shared libraries: libmariadb.so.3: cannot open shared object file: No such file or directorMi archivo acoplable:
FROM rust:1.43 as builder WORKDIR /var/app RUN apt-get update && apt-get install -y libclang-dev clang libmariadb-dev-compat libmariadb-dev COPY Cargo.toml Cargo.lock diesel.toml ./ COPY src src RUN cargo install diesel_cli --no-default-features --features mysql RUN cp /usr/local/cargo/bin/diesel diesel RUN cargo build --release FROM ubuntu USER 1000 WORKDIR /var/app COPY --from=builder --chown=1000:1000 /var/app/target/release/sniper_api app COPY --from=builder --chown=1000:1000 /var/app/diesel diesel CMD ["./app"]Mi carga:
[dependencies] actix-rt = "1.0.0" actix-web = "2.0.0" actix-http = "1.0.1" serde = { version = "1.0.112", features=["derive"] } dotenv = "0.15.0" config = "0.10.1" diesel = { version = "1.4.2", features = ["mysql","r2d2"]} futures = "0.3.5" r2d2 = "0.8.8" r2d2_mysql = "18.0.0" env_logger = "0.7.1" Pero si uso ubuntu/debian/etc. imagen como tiempo de ejecución e instale libmariadb-dev-compat libmariadb-dev todo está bien. ¿Hay alguna manera de obtener un solo binario verdadero con el conector mysql en Rust?
Pensé que el compilador de óxido usa enlaces estáticos e incluye todas las bibliotecas dependientes en el momento de la compilación (por lo tanto, el tamaño del ejecutable).
Esto solo se aplica a las bibliotecas de Rust. Para otros idiomas, generalmente hay poco que rustc pueda hacer.
En particular, en este caso, diesel brinda compatibilidad con mysql / mariadb a través de la caja mysqlclient-sys para la que actualmente existe un problema y un PR adjunto abierto para admitir enlaces estáticos para esta biblioteca. Pero aún no se han fusionado.