¿Libudev como biblioteca estática?
Estoy tratando de construir un binario estático que depende de libudev
.
Desafortunadamente, nix-env -iA nixpkgs.pkgsStatic.libudev
falla con: error: p11-kit no se puede utilizar como biblioteca estática
.
¿Hay una mejor manera de hacer esto?
davy.ai
Sí, hay una mejor manera de construir un binario estático que dependa de
libudev
en Nix. En lugar de usarnix-env
para instalarlibudev
, puedes agregarlo como una dependencia en tu expresión de Nix (típicamente un archivodefault.nix
) usando el conjunto de atributospkgs
.Aquí hay un ejemplo de expresión de Nix que construye un binario estático que depende de
libudev
:En este ejemplo, usamos
pkgs.libudev
como una entrada de construcción, lo que asegura que la bibliotecalibudev
esté disponible durante la construcción de nuestro binario. También usamospkgs.makeWrapper
como una entrada de construcción nativa, lo que nos ayuda a crear un envoltorio alrededor de nuestro binario que establece la variable de entornoLD_LIBRARY_PATH
para incluir la ruta a la bibliotecalibudev
.Finalmente, usamos la función
wrapProgram
para crear un envoltorio alrededor de nuestro binario. El envoltorio estableceLD_LIBRARY_PATH
para incluir la ruta a la bibliotecalibudev
para que nuestro binario pueda encontrar la biblioteca en tiempo de ejecución.Con este enfoque, podemos construir nuestro binario estático sin encontrar el error
error: p11-kit cannot be used as a static library
.