• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

AYUDA Error compilando ejecutable de juego en C++ en debian 9 ¿openssl? +Añado lineas

raylan

Chapucillas
Registrado
19 Jun 2016
Mensajes
89
Puntos
8
Buenas, tengo las sources para sacar un ejecutable de un juego y me da un error compilando. Uso debian 9 y las siguientes librerías son necesarias para la compilación:

apt-get update
apt-get install git subversion autoconf build-essential pkg-config libboost-dev libgmp3-dev libxml2-dev liblua5.1-0-dev libmysqlclient-dev ccache libboost-filesystem-dev libboost-regex-dev libboost-system-dev libboost-thread-dev screen libssl-dev libboost-iostreams-dev

Cambiando libmysqlclient-dev por libmariadbclient-dev-compat ya que la primera desaparece en debian 9 y la segunda es totalmente compatible.

Son muchos archivos .cpp, en principio sólo sale este error pero en varias líneas.

otserv.cpp:614:18: error: invalid use of incomplete type âRSA {aka struct rsa_st}â
BN_dec2bn(&g_RSA->q, g_config.getString(ConfigManager::RSA_PRIME2).c_str());

**Lineas desde la 613 a la 617:

Código:
[COLOR=#24292E]BN_dec2bn(&g_RSA->p, g_config.getString(ConfigManager::RSA_PRIME1).c_str());[/COLOR]
BN_dec2bn(&g_RSA->q, g_config.getString(ConfigManager::RSA_PRIME2).c_str());
BN_dec2bn(&g_RSA->d, g_config.getString(ConfigManager::RSA_PRIVATE).c_str());
BN_dec2bn(&g_RSA->n, g_config.getString(ConfigManager::RSA_MODULUS).c_str()); 
[COLOR=#24292E]BN_dec2bn(&g_RSA->e, g_config.getString(ConfigManager::RSA_PUBLIC).c_str());[/COLOR]


** Lineas
627, 628 y 630:

Código:
[COLOR=#24292E]BN_mod(g_RSA->dmp1, g_RSA->d, r1, ctx);[/COLOR]
BN_mod(g_RSA->dmq1, g_RSA->d, r2, ctx);
[COLOR=#24292E]BN_mod_inverse(g_RSA->iqmp, g_RSA->q, g_RSA->p, ctx);
[/COLOR]


En cualquier caso no tengo problema en poner el archivo entero pero son muchas líneas.

Pongo lo del openssl en el título ya que da algún tipo de error openssl en donde está instalado /usr/.... ; Tengo el openssl 1.1

¿Alguna idea de cómo solucionarlo?


 
Buenas, tengo las sources para sacar un ejecutable de un juego y me da un error compilando. Uso debian 9 y las siguientes librerías son necesarias para la compilación:

apt-get update
apt-get install git subversion autoconf build-essential pkg-config libboost-dev libgmp3-dev libxml2-dev liblua5.1-0-dev libmysqlclient-dev ccache libboost-filesystem-dev libboost-regex-dev libboost-system-dev libboost-thread-dev screen libssl-dev libboost-iostreams-dev

Cambiando libmysqlclient-dev por libmariadbclient-dev-compat ya que la primera desaparece en debian 9 y la segunda es totalmente compatible.

Son muchos archivos .cpp, en principio sólo sale este error pero en varias líneas.

otserv.cpp:614:18: error: invalid use of incomplete type âRSA {aka struct rsa_st}â
BN_dec2bn(&g_RSA->q, g_config.getString(ConfigManager::RSA_PRIME2).c_str());

**Lineas desde la 613 a la 617:

Código:
[COLOR=#24292E]BN_dec2bn(&g_RSA->p, g_config.getString(ConfigManager::RSA_PRIME1).c_str());[/COLOR]
BN_dec2bn(&g_RSA->q, g_config.getString(ConfigManager::RSA_PRIME2).c_str());
BN_dec2bn(&g_RSA->d, g_config.getString(ConfigManager::RSA_PRIVATE).c_str());
BN_dec2bn(&g_RSA->n, g_config.getString(ConfigManager::RSA_MODULUS).c_str()); 
[COLOR=#24292E]BN_dec2bn(&g_RSA->e, g_config.getString(ConfigManager::RSA_PUBLIC).c_str());[/COLOR]


** Lineas
627, 628 y 630:

Código:
[COLOR=#24292E]BN_mod(g_RSA->dmp1, g_RSA->d, r1, ctx);[/COLOR]
BN_mod(g_RSA->dmq1, g_RSA->d, r2, ctx);
[COLOR=#24292E]BN_mod_inverse(g_RSA->iqmp, g_RSA->q, g_RSA->p, ctx);
[/COLOR]


En cualquier caso no tengo problema en poner el archivo entero pero son muchas líneas.

Pongo lo del openssl en el título ya que da algún tipo de error openssl en donde está instalado /usr/.... ; Tengo el openssl 1.1

¿Alguna idea de cómo solucionarlo?


Tienes q dar más información. Que juego es por ejemplo???

Intenta satisfacer todas las dependencias que te pida ./configure incluso las que son optativas principalmente las que tienen q ver con el SSL
 
Buenas @tasadarf

El juego... es algo difícil de explicar. El juego en sí es el tibia, sólo que la comunidad de otland creó en su momento (y sigue creando) repositorios que se adaptan a según que versiones. Están tfs 1, 0.4, 0.3.6.... etc Esta sin embargo, se aleja un poco de eso ya que es un trabajo muy editado que hicieron varias personas creo que en Mexico. La idea es que el juego funcione igual que tibia pero con funciones de pokemon, naruto, dragon ball... En cualquier caso aquí están los repositorios oficiales y aquí cómo compilarlo en Linux.

Intenta satisfacer todas las dependencias que te pida ./configure incluso las que son optativas principalmente las que tienen q ver con el SSL

Con esto no sé exactamente lo que me quieres decir exactamente.

Sé que hay un montón de issues cerrados en el propio git y he abierto uno allí, pero me da la sensación de que está un poco parado el tema, por eso aproveché y abrí aquí el tema.

TODOS los archivos de las sources son .cpp y falla algo en la estructura de esas frases. De hecho me pasó ya algo parecido compilando el ejecutable para tfs 0.4 (este si que es tibia original, sin capas de dragon ball ni leches) pero buscando el error lo solucionaban en varios hilos de otland y consistía en quitar unas comillas, cambiar una palabra de cuatro letras por una de tres.... algo muy simple, pero que obviamente se me escapa al no saber de C++. Pienso que en esta ocasión es algo parecido con las líneas que he puesto en el OP.
 
Buenas @tasadarf

El juego... es algo difícil de explicar. El juego en sí es el tibia, sólo que la comunidad de otland creó en su momento (y sigue creando) repositorios que se adaptan a según que versiones. Están tfs 1, 0.4, 0.3.6.... etc Esta sin embargo, se aleja un poco de eso ya que es un trabajo muy editado que hicieron varias personas creo que en Mexico. La idea es que el juego funcione igual que tibia pero con funciones de pokemon, naruto, dragon ball... En cualquier caso aquí están los repositorios oficiales y aquí cómo compilarlo en Linux.



Con esto no sé exactamente lo que me quieres decir exactamente.

Sé que hay un montón de issues cerrados en el propio git y he abierto uno allí, pero me da la sensación de que está un poco parado el tema, por eso aproveché y abrí aquí el tema.

TODOS los archivos de las sources son .cpp y falla algo en la estructura de esas frases. De hecho me pasó ya algo parecido compilando el ejecutable para tfs 0.4 (este si que es tibia original, sin capas de dragon ball ni leches) pero buscando el error lo solucionaban en varios hilos de otland y consistía en quitar unas comillas, cambiar una palabra de cuatro letras por una de tres.... algo muy simple, pero que obviamente se me escapa al no saber de C++. Pienso que en esta ocasión es algo parecido con las líneas que he puesto en el OP.

Este finde le echare un vistazo por encima ya que mis conocimientos de c++ son muy basicos, me centrare si hay alguna alerta diferente que se pueda solucionar. Que diferencia hay entre eso server 2 y server 3 OTX
 
Este finde le echare un vistazo por encima ya que mis conocimientos de c++ son muy basicos, me centrare si hay alguna alerta diferente que se pueda solucionar. Que diferencia hay entre eso server 2 y server 3 OTX

En el propio github me dicen que instale openssl 1.0.2 pero he leído que puede ser contraproducente para el sistema operativo además de que se hace de una manera algo compleja... Después de eso me ha closeado el issue lol

El tema es que yo he comprado un datapack a una persona que ahí no aparece, pero en principio las sources son las mismas aunque he visto que han metido nuevos "paths"... Pero vamos que el error que me daba a mi lo ha puesto otra persona también. El autor del git cierra nuestros issues lol
 
En el propio github me dicen que instale openssl 1.0.2 pero he leído que puede ser contraproducente para el sistema operativo además de que se hace de una manera algo compleja... Después de eso me ha closeado el issue lol

El tema es que yo he comprado un datapack a una persona que ahí no aparece, pero en principio las sources son las mismas aunque he visto que han metido nuevos "paths"... Pero vamos que el error que me daba a mi lo ha puesto otra persona también. El autor del git cierra nuestros issues lol
Ya te contaré xq una de las 2 formas de instalación incluye el ./configure que te comenté y de ahí se puede sacar bastante información
 
Pongo un up por aquí a ver si hay suerte :eek:
 
Up a ver si alguien nuevo lo lee...
 
¿openssl-dev está instalado? Pega sólo las últimas líneas del log de la parte del configure:

Código:
./configure --enable-server-diag --enable-mysql --enable-root-permission
 
¿openssl-dev está instalado? Pega sólo las últimas líneas del log de la parte del configure:

Código:
./configure --enable-server-diag --enable-mysql --enable-root-permission

Sí que lo tengo instalado, el problema es que al ser debian 9 igual hay algún problema y las sources no se hicieron para un SO nuevo.

:~# ./configure --enable-mysql --enable-root-permission
-bash: ./configure: No existe el fichero o el directorio


Hasta ahora he compilado otros TFS (sources parecidas) sin mayor problema...
 
:~# ./configure --enable-mysql --enable-root-permission
-bash: ./configure: No existe el fichero o el directorio

Tienes que ejecutar el configure desde el directorio donde tienes las fuentes. Además, mejor no compiles como root.
 
Tienes que ejecutar el configure desde el directorio donde tienes las fuentes. Además, mejor no compiles como root.

Ahhh vale, ahora edito este mensaje entonces, pensaba que era algo del sistema el configure. Como verás sé lo justito de linux, por eso voy con root etc. Por qué es mejor compilar con otro usuario?

Código:
checking for main in -lcrypto... yeschecking for main in -lboost_thread-gcc-mt... no
checking for main in -lboost_thread-mt... no
checking for main in -lboost_thread... yes
checking for main in -lboost_regex-gcc-mt... no
checking for main in -lboost_regex-mt... no
checking for main in -lboost_regex... yes
checking for main in -lboost_system-gcc-mt... no
checking for main in -lboost_system-mt... no
checking for main in -lboost_system... yes
checking for main in -lboost_date_time-gcc-mt... no
checking for main in -lboost_date_time-mt... no
checking for main in -lboost_date_time... yes
checking for main in -lboost_filesystem-gcc-mt... no
checking for main in -lboost_filesystem-mt... no
checking for main in -lboost_filesystem... yes
checking for LUA... no
checking lua.h usability... no
checking lua.h presence... no
checking for lua.h... no
checking lua5.1/lua.h usability... yes
checking lua5.1/lua.h presence... yes
checking for lua5.1/lua.h... yes
checking for main in -llua... no
checking for main in -llua5.1... yes
checking mysql/mysql.h usability... yes
checking mysql/mysql.h presence... yes
checking for mysql/mysql.h... yes
checking for main in -lmysqlclient... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands


otxserver 2.X.Series


Using LuaJIT................ : no
Using ground cache.......... : no
Server diagnostics.......... : yes
Home-directory configuration : no
Root run permission......... : yes
Login server mode........... : no
OTAdmin protocol............ : no
OTServ custom allocator..... : no
Debug build................. : no


Build with MySQL............ : yes
Build with MySQL++Connector. : no
Build with SQLite........... : no
Build with PostgreSQL....... : no


Configure complete, now you may type './build.sh'.
Annubis si necesitas que ponga algo más de log me dices.
 
Última edición:
Parece que el configure termina bien, ejecuta la última parte:

Código:
make -j $(nproc)

Y pega el log
 
Código:
make  all-am
make[1]: se entra en el directorio '/home/poketibia/src'
  CXX      otserv.o
otserv.cpp: In function âvoid otserv(StringVec, ServiceManager*)â:
otserv.cpp:613:28: error: âRSA_get0_pâ was not declared in this scope
  BN_dec2bn(RSA_get0_p(g_RSA), g_config.getString(ConfigManager::RSA_PRIME1).c_str());
                            ^
otserv.cpp:614:28: error: âRSA_get0_qâ was not declared in this scope
  BN_dec2bn(RSA_get0_q(g_RSA), g_config.getString(ConfigManager::RSA_PRIME2).c_str());
                            ^
otserv.cpp:615:28: error: âRSA_get0_dâ was not declared in this scope
  BN_dec2bn(RSA_get0_d(g_RSA), g_config.getString(ConfigManager::RSA_PRIVATE).c_str());
                            ^
otserv.cpp:616:28: error: âRSA_get0_nâ was not declared in this scope
  BN_dec2bn(RSA_get0_n(g_RSA), g_config.getString(ConfigManager::RSA_MODULUS).c_str());
                            ^
otserv.cpp:617:28: error: âRSA_get0_eâ was not declared in this scope
  BN_dec2bn(RSA_get0_e(g_RSA), g_config.getString(ConfigManager::RSA_PUBLIC).c_str());
                            ^
In file included from /usr/include/openssl/asn1.h:24:0,
                 from /usr/include/openssl/rsa.h:16,
                 from otserv.cpp:44:
otserv.cpp:628:21: error: âRSA_get0_dmp1â was not declared in this scope
  RSA_get0_dmp1(g_RSA),
                     ^
otserv.cpp:641:21: error: âRSA_get0_iqmpâ was not declared in this scope
  RSA_get0_iqmp(g_RSA),
                     ^
Makefile:565: fallo en las instrucciones para el objetivo 'otserv.o'
make[1]: *** [otserv.o] Error 1
make[1]: se sale del directorio '/home/poketibia/src'
Makefile:417: fallo en las instrucciones para el objetivo 'all'
make: *** [all] Error 2
 
Como ya sospechabas, el problema está en que tu openssl es demasiado nuevo, según ésta lista de correo y los enlaces que proporciona:

Error RSA compiling executable of a cust - C++ Forum
rsa_st definition is absent * Issue #1604 * openssl/openssl * GitHub
RSA_get0_key(3ssl) — libssl-doc — Debian unstable — Debian Manpages

Es decir, esas llamadas que dan error, lo dan porque a partir de openssl 1.1.0 dejaron de ser compatibles.

La soluciones que tienes pasan por instalar un openssl más antiguo y compatible con el código que tú tienes en el sistema que ya tienes instalado; instalar una Debian más antigua que tenga ese openssl o usar un código adaptado a una nueva versión de openssl.
 
Hola Annubis. Muchas gracias, pensaba que habría una solución cogida por pinzas cambiando algo de esas líneas de código que dan error... Pero si me dices que hay que usar un código adaptado a la nueva versión de openssl igual consiste en cambiar algo más que 6 líneas... Por cierto, el primer link de los que pasas es un thread también mío que abrí en esa web (c++ forum)

Adquirir otro debian en mi dedicado ahora mismo es improbable ya que hace menos de 7 meses que lo tengo y he configurado todo perfecto, a parte de que tengo varias aplicaciones actives y online que no puedo parar... Se me ocurre instalar uno más viejo en una máquina virtual (me dijeron que ubuntu también serviría) para simplemente compilar el ejecutable y ya usarlo en el dedicado, supongo que funcionaría.

Lo malo de bajar de versión el openssl es que el resto de sources que he compilado me han ido de 10 y tengo miedo de que falle algo sólo por este juego. En cualquier caso es fácil instalar un openssl más antiguo? En su día busqué información y me echó para atrás un comentario de una persona que no lo recomendaba...


Pd. Si alguien que lea el mensaje usa una versión inferior de debian o usa ubuntu me haría un gran favor compilándome estas sources, se las podría pasar por privado.
 
Había olvidado completamente este tema, yo tengo Ubuntu 18.04 si la necesitáis y si no con una máquina virtual puedes trastear lo q quieras

Enviado desde mi Mi 9T mediante Tapatalk
 
Había olvidado completamente este tema, yo tengo Ubuntu 18.04 si la necesitáis y si no con una máquina virtual puedes trastear lo q quieras

Enviado desde mi Mi 9T mediante Tapatalk

Hola tasadarf !

El tema es que si compilo o alguien me compila el ejecutable funcionará luego en mi dedicado, donde no ha sido posible compilarlo? Simplemente así cortando y pegándolo?
 
Hola tasadarf !

El tema es que si compilo o alguien me compila el ejecutable funcionará luego en mi dedicado, donde no ha sido posible compilarlo? Simplemente así cortando y pegándolo?
En principio sí el problema es solo de compilación si que funcionaría. Ya que en principio tus versiones son más modernas y en principio retrocompatibles. Pero no está asegurado xq al compilarlo en una máquina antigua no solo usa esa librería usa más y en algún caso puede que haya ruptura de versiones y tengas q instalar una versión antigua de la librería para q sea compatible. Por probar no pierdes nada
 
Buenas a todos... actualizo a día de hoy casi en Noviembre, porque estos días se me presentó una oferta de comprar un servidor de otro juego igual que el que expuse en este hilo pero con cosas diferentes. Por una buena oferta me han vendido el datapack, la database, la web y las sources... pues bueno sorpresón, a la hora de compilar las sources vuelve a dar un error que además no tiene nada que ver con este. Parte del error es este:

Código:
game.cpp:5533:1: error: this âifâ clause does not guard... [-Werror=misleading-indentation]
 if (invitedPlayer == player)
 ^~
game.cpp:5535:2: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the âifâ
  Party* party = player->getParty();
  ^~~~~
cc1plus: all warnings being treated as errors
Makefile:40: fallo en las instrucciones para el objetivo 'obj/game.o'
make: [B]*[/B] [obj/game.o] Error 1

Esta vez la forma de compilar era diferente. Sólo había que instalar/actualizar las librerías (que son las mismas que para casi todas las sources) pero luego sólo había que poner "make clean" y después "make".

En este caso la persona que me ha vendido el servidor, aunque es brasileño y nos entendemos en su pobre castellano, me ha dicho que necesito Debian 8 o Ubuntu 14.04... Me quedo con debian seguro ya que es el sistema operativo que he usado siempre, por lo que me toca hacer un downgrade. El caso es que el servidor que tengo ahora en activo va MUY BIEN, y tengo la sensación de que debian 9 le ayuda a ir tan bien... de hecho va tan ligero y rápido que he tenido muchísimos players de sudamérica y brasil jugando, siendo que mi servidor está ubicado en Francia y tanto ping de diferencia les suele echar para atrás.

Tengo miedo de abrirlo en debian 8 y que vaya peor, además tendría que cerrarlo (obviamente) por X horas y ahora mismo está muy activo. Me costó aprender a instalar apache, mysql, aprender a controlar todo...

Según me ha dicho esta persona si él me da el ejecutable no funcionaría. Sólo funciona en la máquina que lo ha podido compilar.... eso dice... A ver qué opináis: @Annubis y @tasadarf
 
Arriba