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 instalaronpbc.h
ylibpbc
) -
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; }