con compilar como abrir ubuntu compilation linker gmp

como - compilar en ubuntu



Error al vincular gmp al compilar el paquete cpabe desde su código fuente (4)

Terminé pasando varias horas compilando el paquete cpabe desde su código fuente en Ubuntu 12.10, con dependencias gmp y pbc. El siguiente mensaje de error parecía ser el problema de muchas personas en la Web (¡incluso para compilar otros paquetes que requerían instalación de libgmp como dependencia!). Sin embargo, no pude encontrar ninguna solución viable allí:

... /usr/bin/ld: /usr/local/lib/libpbc.so: undefined reference to symbol ''__gmpz_init'' /usr/bin/ld: note: ''__gmpz_init'' is defined in DSO /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libgmp.so so try adding it to the linker command line /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libgmp.so: could not read symbols: Invalid operation collect2: ld returned 1 exit status


intente agregarlo a la línea de comando del enlazador

¿ -lgmp agregar -lgmp a la línea de comando del enlace como sugiere el error?


Agregar lgmp era necesario, pero todas las demás bibliotecas usadas también debían estar vinculadas. Finalmente resolví el problema especificando esas bibliotecas en la variable de entorno LDFLAGS mientras emitía el comando make. Entonces, después de la instalación de gmp, pbc, bswabe o cualquier otra dependencia requerida, los pasos de compilación fueron los siguientes:

  • ./configure -with-pbc-include = ruta -with-pbc-lib = ruta (las rutas donde se instalaron pbc.h y libpbc)

  • make LDFLAGS = "- lgmp -lpbc -lcrypto -L / usr / lib / x86_64-linux-gnu -lglib -lbswabe -lgmp"

  • hacer la instalación


El mío fue una pequeña variación de MarAlavi''s, para Linux 16 Mint:

  • ./configure -with-pbc-include= path -with-pbc-lib= path (las rutas donde se instalaron pbc.h y libpbc )
  • make LDFLAGS="-lgmp -lpbc -lcrypto -L/usr/lib/x86_64-linux-gnu -lglib-2.0 -lbswabe -lgmp"
  • make install

Observe el " -lglib-2.0 ".


Puede ser trivial para algunos de ustedes, pero a policy_lang.y le falta un punto y coma en la línea 67, por lo que la compilación falla con:

policy_lang.y: In function ‘yyparse’: policy_lang.y:67:38: error: expected ‘;’ before ‘}’ token result: policy { final_policy = $1 }

Se puede arreglar cambiando la línea 67 a

result: policy { final_policy = $1; }