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.

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

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay una mejor manera de construir un binario estático que dependa de libudev en Nix. En lugar de usar nix-env para instalar libudev, puedes agregarlo como una dependencia en tu expresión de Nix (típicamente un archivo default.nix) usando el conjunto de atributos pkgs.

    Aquí hay un ejemplo de expresión de Nix que construye un binario estático que depende de libudev:

    { pkgs ? import <nixpkgs> {} }:
    
    pkgs.stdenv.mkDerivation rec {
      name = "my-static-binary";
      src = /path/to/my/source/code;
      nativeBuildInputs = [ pkgs.makeWrapper ];
      buildInputs = [ pkgs.libudev ];
      buildPhase = ''
        make
        wrapProgram ./my-binary --prefix PATH : ${pkgs.libudev}/lib
      '';
    }
    

    En este ejemplo, usamos pkgs.libudev como una entrada de construcción, lo que asegura que la biblioteca libudev esté disponible durante la construcción de nuestro binario. También usamos pkgs.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 entorno LD_LIBRARY_PATH para incluir la ruta a la biblioteca libudev.

    Finalmente, usamos la función wrapProgram para crear un envoltorio alrededor de nuestro binario. El envoltorio establece LD_LIBRARY_PATH para incluir la ruta a la biblioteca libudev 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.

Comments are closed.