elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 238
1  Programación / Programación C/C++ / No puedo cross-compilar usando las librerías ARM de Loquendo con GCC, se requieren los simbolos GLIBC_2.0, 2.1 y 2.3 en: 21 Noviembre 2020, 20:09 pm
Buenas foro,

Pues siguiendo la tesis doctoral que hizo Javier y solo teniendo disponible el shared object (*.so) ELF 32-bit LSB shared object, ARM (obtenido al ejecutar el comando file) de los shared objects de Loquendo para Linux, en este caso, Tom Tom .

Me gustaría intentar compilar el programa que sugirió Javier, llamado text2audio, y disponible en el mismo pdf:

Código
  1. #include <stdio.h>
  2. #include "../sdk/win/LTTS7/include/loqtts.h" /* Loquendo TTS include file */
  3. #include <string.h>
  4. #define CODING tts_LINEAR // "l" /* "l" (linear), "a" (A-law), "u" (U-law) */
  5. #define SAMPLE_RATE 32000 /* Use 8000 for A-law or U-law coding */
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.    ttsHandleType hInstance; /* Instance handle */
  10.    ttsHandleType hVoice; /* Voice handle */
  11.    ttsResultType err; /* Error code returned by TTS APIs */
  12.  
  13.    char* p = "Jorge";
  14.    char* fich = "sample.wav";
  15.    char frase[5000]="";
  16.    int i;
  17.  
  18.    fprintf (stderr,"Number: \%i\n",argc);
  19.    if(argc > 3) {
  20.        p = argv[1]; // Voice
  21.        fich = argv[2]; // Path
  22.        for(i=3;i<argc;i++)
  23.        {
  24.            strcat(frase,argv[i]);
  25.            strcat(frase," ");
  26.        }
  27.        fprintf (stderr,"Sentence: \%s\n",frase);
  28.        fprintf (stderr,"File : \%s\n",fich);
  29.        } else {
  30.            fprintf(stderr, "Exec '\%s <speaker> <file> <text> '\n", argv[0]);
  31.            return -1;
  32.        }
  33.        fprintf(stderr, "Using voice \%s\n", p);
  34.  
  35.        /* Initializes the LoquendoTTS Instance */
  36.        err = ttsNewSession(&hInstance, NULL);
  37.        if (err != tts_OK)
  38.        {
  39.            fprintf(stderr, "\%s", ttsGetErrorMessage(NULL));
  40.            return err;
  41.        }
  42.  
  43.        /* Sets the voice parameters */
  44.        err = ttsNewVoice(&hVoice, hInstance, p); // 6 -> 7: SAMPLE_RATE, CODING
  45.        if (err != tts_OK)
  46.        {
  47.            fprintf(stderr, "\%s", ttsGetErrorMessage(hInstance));
  48.            (void)ttsDeleteSession(hInstance);
  49.            return err;
  50.        }
  51.  
  52.        /* Sends samples directly to the audio board */
  53.        //err = ttsSetAudio(hInstance, "LoqAudioFile", argv[2], CODING, 0);
  54.        err = ttsSetAudio(hInstance, "LTTS7AudioBoard", argv[2], SAMPLE_RATE, CODING, tts_STEREO, 0);
  55.  
  56.        if (err != tts_OK)
  57.        {
  58.            fprintf(stderr, "\%s", ttsGetErrorMessage(hInstance));
  59.            (void)ttsDeleteSession(hInstance);
  60.            return err;
  61.        }
  62.  
  63.        /* Converts text to speech */
  64.        err = ttsRead(
  65.            hInstance, /* Instance handle */
  66.            frase, /* Input */
  67.            ttsFALSE, // async
  68.            ttsFALSE, // fromFile
  69.            0);
  70.  
  71.        if (err != tts_OK)
  72.        {
  73.            fprintf(stderr, "\%s", ttsGetErrorMessage(hInstance));
  74.            (void)ttsDeleteSession(hInstance);
  75.            return err;
  76.        }
  77.  
  78.        /* Closes the Loquendo TTS instance; the voice will be automatically closed */
  79.        (void)ttsDeleteSession(hInstance);
  80.        return 0;
  81. }

(Esta versión es un poco diferente de la original porque la adapté para la versión LTTS 7, en lugar de la v6)

La idea es tener un endpoint en PHP que pueda usarse para generar archivos mp3 / wav para un texto (usando TTS internamente).

Los métodos que probé ya:

  • Instalando de una instancia de Loquendo para Windows en Wine y PlayOnLinux con Balabolka (con CLI): https://eltallerdemiku.blogspot.com/2018/12/como-instalr-loquendo-en-linux-con.html
  • Usando lo mismo, pero con los bindings de Ruby disponibles aquí: https://github.com/jojje/win32-loquendo/ (bajo PlayOnLinux y mi último enfoque fue intentar ejecutar ruby ​​directamente bajo Linux (sin emulación) con rvm, pero tuve muchos problemas al intentar instalar las gemas en una instancia de 32 bits, al menos la versión de 64 bits de Ruby en Windows no funcionó)
  • Preguntar en el repositorio de eSpeak: https://github.com/espeak-ng/espeak-ng/issues/836
  • Preguntando en RHVoice: https://github.com/Olga-Yakovleva/RHVoice/issues/247
  • Preguntando a Escolha Tecnologia, ya que ellos también usan estas voces. Pero me dijeron que no revelarían ningún secreto sobre su negocio.
  • Enviando un email a Nuance, ya que compraron Loquendo en 2011 y tenían Loquendo disponible hasta 2017. Y como dije sé que hay versiones de Linux disponibles porque están indicadas en el Manual de Instalación. (Aunque estoy pendiente de llamar este lunes al soporte técnico: https://www.nuance.com/es-es/about-us/contact-us.html a ver si con suerte siguieran dando soporte a Loquendo, pero dudo que un producto de hace 10 años lo tenga, y a parte que no soy ni cliente...)
  • Intentando cargar la librería con PHP ffi, intentando recrear lo mismo que hizo el proyecto win32-loquendo, sin suerte.
  • Preguntando a Javier Mikel Olaso (encontré su correo electrónico en Google), como hizo una tesis doctoral usando Loquendo en Linux: https://addi.ehu.es/bitstream/handle/10810/27565/TESIS_OLASO_FERNANDEZ_JAVIER%20MIKEL.pdf
  • Como dije, vi que el Manual de instalación tiene referencias a su producto en Linux. Descubrí que la biblioteca Loquendo TTS tiene el siguiente nombre en Linux: libLoqTTS7. Entonces busqué esa palabra con Google Dorks, y solo encontré referencias a GPS / Foros de Tomtom ...
  • Intentando localizar los objetos compartidos para i368 o amd64 en Linux, como se indica en la instalación manual de la guía de usuario (PDF) del producto original de Loquendo.

Por esta razón, mi último intento es emular las bibliotecas ARM instalando qemu-user-static y usando /usr/bin/qemu-arm-static (como MinusFour me recomendó, aunque también me dijo que lo más seguro que no funcionase) (ya que creo que este será el método menos costoso en lo que a uso de recursos se refiere). Pero para esto, tendré que realizar cross compile del programa text2audio para que sea compatible con la arquitectura ARM, si no, gcc mostrará el siguiente error: error adding symbols: file in wrong

Como me veo obligado a compilar el código de text2audio para la arquitectura arm, he decidido instalar la versión gcc para esta arquitectura siguiendo este tutorial: https://www.acmesystems.it/arm9_toolchain

Este fue el comando que usé para compilar mi programa c:

Código
  1. $ arm-linux-gnueabihf-gcc -L$d/sdk/linux/LoquendoTTS/lib -I$d/sdk/win/LTTS7/include -o txt2audio $d/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so txt2audio.c

Probé las versiones arm-linux-gnueabihf-gcc y arm-linux-gnueabi-gcc sin suerte. Se produjeron los siguientes errores:

Citar
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `pow@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fwrite@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_detach@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `sprintf@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `printf@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `stderr@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strchr@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `sqrt@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `strncat@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fread@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `localtime_r@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `shmget@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `getpid@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `dlclose@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `log@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `gettimeofday@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `strspn@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `memset@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `puts@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `gethostname@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `stdout@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `getenv@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `opendir@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strstr@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_cond_init@GLIBC_2.3.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `semctl@GLIBC_2.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fseek@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `fscanf@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `shmat@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `clock_gettime@GLIBC_2.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `remove@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fileno@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `__ctype_b_loc@GLIBC_2.3'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_mutex_destroy@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `exp@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fputc@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fgets@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `semop@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `__strtod_internal@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `dlsym@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `time@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strrchr@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `shmdt@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `dlopen@GLIBC_2.1'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `sin@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `rand@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_cond_wait@GLIBC_2.3.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `readdir@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `nanosleep@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `__strtol_internal@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `log10@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `closedir@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strncmp@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_self@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `sscanf@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_cond_signal@GLIBC_2.3.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `ceil@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `strcspn@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strcat@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `fclose@GLIBC_2.1'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fgetc@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `memmove@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strpbrk@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strcpy@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strncpy@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_mutex_lock@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fprintf@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `free@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `srand@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `mmap@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fnmatch@GLIBC_2.2.3'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_join@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_create@GLIBC_2.1'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `realloc@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strlen@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `memcpy@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `stdin@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_mutex_unlock@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strcmp@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_cond_destroy@GLIBC_2.3.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `dlerror@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `__ctype_toupper_loc@GLIBC_2.3'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_cond_timedwait@GLIBC_2.3.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `modf@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `malloc@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `memcmp@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_mutex_init@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `cos@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `semget@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `ftell@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fputs@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `fopen@GLIBC_2.1'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `munmap@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `putchar@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `fflush@GLIBC_2.0'

Revisé la siguiente respuesta (en StackOverflow) que sugería usar el comando man seguido del nombre del símbolo, por ejemplo, man pow sugiere usar la bandera -lm (siempre después del argumento -o) ...

Lo probé sin suerte. Creo que el problema está en la versión GLIBC que requiere el objeto compartido.

Entonces, ¿cómo puedo usar una versión diferente en el proceso de compilación cruzada para ARM y GLIBC 2.0?
2  Foros Generales / Noticias / Re: Esta extensión te permitirá comprobar cómo se ve una web en distintos tipos ... en: 25 Noviembre 2019, 13:48 pm
Genbeta ha metido la pata con este articulo.

En Chrome hay un botón:



Que hace la misma función. Una aplicación con 17 opiniones y menos de 10k instalaciones, algo un tanto pobre como para darle tanto bombo, me da que pensar...
3  Comunicaciones / Redes / [Proxmox] Port forwarding en Debian 9 (guest) en: 16 Agosto 2019, 15:30 pm
Buenas chicos, veréis tengo el siguiente problema desde hace un tiempo. Contaté un server de OVH para hostear ciertas webs y servicios. La cuestión está en que te tenido problemas constantes para configurar las interfaces y el tema del port forwarding.

El sistema está configurado usando un Proxmox  como anfitriona y una debian como MV huesped. Tuve que crear una interfaz virtual, a la cual está enganchada la debian (sin DHCP) con una configuración estática.

He querido abrir puertos de forma rápida y sencilla, pero no he podido. Utilizaría casi por seguro una interfaz web aunque fuese como la que ofrece IPCop, pero paso de meterme en más embrollo.

Así que ya puestos a editar el archivo "/etc/network/interfaces" creé la siguiente config.

Código:
auto lo
iface lo inet loopback

iface enp4s0 inet manual

iface enp5s0 inet manual

auto vmbr0
iface vmbr0 inet static
        address  <ip_publica>
        netmask  24
        gateway  <gateway_publica>
        bridge-ports enp4s0
        bridge-stp off
        bridge-fd 0

auto vmbr1
iface vmbr1 inet static
        address  192.168.x.xx
        netmask  24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '192.168.x.0/24' -o vmbr1 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.x.0/24' -o vmbr1 -j MASQUERADE
        post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.x.55:80
        post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.x.55:80
        post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.x.55:80
        post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to 192.168.x.55:22
        post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to 192.168.x.55:22

Donde 192.168.x.xx es la IP de la vmbr1, y 192.168.x.55 es la IP de la debian.

La cosa está en que cuando hago "ifdown vmbr1; ifup vmbr1" para reiniciar dicha config el siguiente error me asalta:

Citar
iptables: No chain/target/match by that name.

Por 2-3 veces.

Y después:

Citar
Waiting for vmbr1 to get ready (MAXWAIT is 2 seconds).



El caso es que no se a que se debe... Y al verdad es que mosquea bastante, ya que por un lado no tengo como verificar si los puertos estan abiertos y apuntando a donde yo quiero.

Es más hay veces que el SSH de la Debian funciona y parece que es por pura casualidad. Y otras sin embargo ni la consola del Proxmox quiere abrir, en fin, que no sé que está ocurriendo y necesito 2 cosas:

  • Hacer el port forwarding
  • Saber de un metodo que me aseguro que está funcionando

Un saludo.
4  Programación / Ingeniería Inversa / Como sniffear un websocket? en: 16 Agosto 2019, 06:27 am
Buenas chicos, me gustaría sniffear un websocket por tal de conseguir cierta información (no sensitva) acerca de los hits que reciben ciertos repositorios asociados a un servicio de terceros el cual expone dicha información, con el único propósito de analizar esa información, crear un ranking y analizar ciertas tendencias e información estadística de repositorios en Github.

Explicado mi propósito, os comento el problema que tengo... Resulta ser que  he tirado por el camino sencillo y me he buscado un cliente de Websockets, el cual se conecte a un servidor, en C#.

Aquí está la url donde se expone dichos datos: http://hits.dwyl.io, como véis en el source code se está utilizado Socket.io para conectarse a dicho websocket. En la consola se muestra un error 400 (donde se muestra con una clave/sid de acceso: "ws://hits.dwyl.io/socket.io/?EIO=3&transport=websocket&sid=6qKFrfR_NwJSJwqPAAOL", de esta clave hablaremos ahora después).

La cosa está en que yo en C#, estoy usando esta lib (https://github.com/sta/websocket-sharp#websocket-client), la cual tiene un ejemplo claro.

He intentado conectar el websocket a esta uri: "ws://hits.dwyl.io"

Código
  1.            using (var ws = new WebSocket("ws://hits.dwyl.io"))
  2.            {
  3.                ws.OnMessage += (sender, e) =>
  4.                    Console.WriteLine(e.Data);
  5.  
  6.                ws.Connect();
  7.                Console.ReadKey(true);
  8.            }

Pero recibo el siguiente error:

Citar
16/08/2019 6:16:12|Fatal|WebSocket.doHandshake|Not a WebSocket handshake response.

Googleando un poco, todo apunta a que se requiere algún tipo de SSID/key para poder acceder a la petción o algo, he estado mirando el source code de socket.io (https://github.com/socketio/socket.io/blob/e0b2cb0c5a9af768a48c43f65643412cc8edc7df/docs/API.md y la documentación), pero sin suerte, no he encontrado nada relevante, ni si quiera definiciones de eventos como aquí ponen (http://hits.dwyl.io/client.js) "news" o "hits". Ni si quiera he encontrado algo en una base de datos de exploit para la version 2.0.3 de socket.io... Así que por ese motivo, dejo que me guiéis en este rompecabezas, para ver que podría hacer al respecto.

Un saludo.
5  Programación / .NET (C#, VB.NET, ASP) / [C#] PathHinter - Útil para replicar el autocompletado de rutas como Unix en: 15 Agosto 2019, 01:50 am
Muy buenas, aquí os traigo una nueva release de un pequeño util que he desarrollado esta tarde.

Básicamente, se trata de una librería de unas 300+ líneas que replica el comportamiento del autocompletado de rutas que presentan algunos terminales de sistemas como Unix o Windows.



Una imagen dice más que mil palabras.

Bastante sencillo de usar. Los controles son los siguientes (se tiene que escribir "/" para poder empezar):

  • Tabulador: Para ver las posibles rutas
  • Flecha arriba/abajo: Seleccionar entre varias opciones disponibles
  • Flecha izquiersa derecha: De/Autocompletar caracteres sugeridos

Estos son los métodos que se usarán:

Código
  1. PathHint.ReadLine() // Mostrar sin nada
  2. PathHint.ReadLine(string) // Mostrar con un texto
  3. PathHint.ReadLine(string, enum, string, ConsoleColor) // Opción más avanzada, donde se puede elegir entre distintos estilos, un Regex y el color a usar cuando se sugiera una ruta
  4.  

ENLACES


Un saludo.
6  Programación / Desarrollo Web / Recomendaciones para hostear en: 17 Julio 2019, 22:20 pm
Buenas estoy diseñando una página web para un cliente y me gustaría dar la mejor impresión posible.

Pero claro, tengo la duda de que no se que servicio utilizar, estoy entre estos 4 candidatos: Plesk, Heroku, uno con cPanel (Hostgator) o un server dedicado (OVH, Kimsufi, etc etc)...

Que me recomendáis?

Para mi cada uno tiene sus pros y sus contras, pero me gustaría escuchar una voz experta sobre el tema.

Gracias.

Un saludo.
7  Programación / Ingeniería Inversa / Re: Intentando "crackear" Spotify en: 2 Julio 2019, 20:19 pm
Usted hizo volcado del proceso, o dll utilizado por el proceso?
Best Regards

Let's talk using Telegram better: http://t.me/z3nth10n

Thanks!

yo lo ultimo que he leido de spotify fue esto:
espero les sirva

Saludos Apuromafo

Le echaré un vistazo más en profundidad, parece bastante interesante. Gracias!
8  Programación / Ingeniería Inversa / Intentando "crackear" Spotify en: 2 Julio 2019, 18:04 pm
Hola gente, después de cierto tiempo aquí vengo con un nuevo tema, que creo que va a ser larguillo, pero bueno. Lo he puesto en "Ing. Inversa" porque es a lo que más se le asemeja esta duda, creo...

En fin, la cuestión está en que hace algún tiempo, encontré una aplicación que te escribia dos entradas en el archivos /etc/hosts para anular la publicidad proveniente de Spotify.

Cosa que Spotify no hace mucho ha arreglado, por lo que ahora cualquier canción nueva que tenga que ser reproducida no se va a escuchar al menos que los anuncios se reproduzcan antes.

Bueno, la cosa está en que no hace mucho encontré este repositorio (Spotify1710), lo estuve mirando así por encima, ya que yo de C++ tampoco entiendo mucho y bueno, pues lo probé y vi que no funcionaba (Spotify crashea) asi que me puse a hacer lo mismo pero en C#. (Quizás debería de probar una version más antigua de Spotify?, ya que hay varias releases...)

Según he visto como funciona esta utilidad lo que se hace es inyectar una (managed) DLL dentro un (unmanaged) proceso. Esto es posible gracias a una librería llamada "SharpNeedle"...

La cosa está en que todo funciona perfectamente... He creado hasta un sistema de sockets para recibir mensajes desde dentro del proceso de Spotify hasta una consola)...

Todo funcionaba, hasta el momento que dije de reimplementar la segunda parte que es la de modificar un método dentro de Spotify, el proyecto original utiliza Detours. Aquí es donde digo que creo que falla todo (tanto en mi version como en la versión hecha en C++ por Meik1710, como digo debería de probar versiones antiguas de Spotify).

Yo para esto utilizo un wrapper para .NET llamado "detours.net", con el cual ando un poco perdido como podréis comprobar: https://github.com/uta-org/SpotifySharper/blob/master/SpotifySharper.Injector/Tools/SpotifyPatchAds.cs#L186 (como veréis no tengo ni idea que puntero pasarle como parametro, he estado mirando el código original, pero como es posible obtener un puntero de una void? Yo he recreado esto con la clase "GCHandleProvider", pero vamos que estoy dando palos de ciego...)

Pero la cosa está en que dentro de lo que cabe, no todo está perdido, no he llegado a un punto muerto aún. (O quizás sí, no lo sé), el caso está en que Spotify me ha generado un archivo *.dmp por cada crash, pero el WinDbg no me muestra nada... Me muestra el siguiente error:

Citar
This dump file has an exception of interest stored in it.
The stored exception information can be accessed via .ecxr.
(30e0.4a58): Access violation - code c0000005 (first/second chance not available)
For analysis of this file, run !analyze -v

* El cual no entiendo *

Con VS2017 la cosa cambia, me muestra "The thread tried to read from or write to a virtual address for which it does not have the appropriate access.", lo que me quiere decir que el puntero que he usado para leer y modificar el metodo a traves del delegado era erroneo. (Es decir, esto --> lo mismo pero en C++, supuestamente lo he implementado bien no?)

Como puedo obtener el puntero de una función? O como puedo obtener a que módulo pertenece un una dirección de memoria especifica? (al menos para saber que debería probar de decompilar), la verdad que no estoy seguro de nada... Para ser sinceros, necesito ayuda de cerca. He estado mirando el PInvoke en busca de pistas (ya que dentro del Kernel32.dll existen metodos para obtener cosas parecidas, como por ejemplo: "GetModuleHandle", lo que se me ocurre quizás es probar a obtener la dirección de memoria para cada modulo, y acotar entre dos modulos una dirección de memoria, pero no se si daría resultado, lo daría?)

Otra de las cosas que me ralla del tema es que con detours.net, por lo visto el funcionamiento es bien sencillo:

Código
  1. namespace myplugin
  2. {
  3.    public static class Logger
  4.    {
  5.        // Declare your delegate
  6.        public delegate int CoCreateInstanceDelegate(
  7.            Guid rclsid, IntPtr pUnkOuter,
  8.            int dwClsContext, Guid riid, ref IntPtr ppv
  9.        );
  10.  
  11.        // And now declare your hook
  12.        [Detours("ole32.dll", typeof(CoCreateInstanceDelegate))]
  13.        public static int CoCreateInstance(
  14.            Guid rclsid, IntPtr pUnkOuter,
  15.    int dwClsContext, Guid riid, ref IntPtr ppv
  16.        )
  17.        {
  18.            // Call real function
  19.            int result = ((CoCreateInstanceDelegate)DelegateStore.GetReal(MethodInfo.GetCurrentMethod()))(rclsid, pUnkOuter, dwClsContext, riid, ref ppv);
  20.  
  21.            Console.WriteLine(" {" + rclsid.ToString() + "} {" + riid.ToString() + "} " + result.ToString("x"));
  22.  
  23.            return result;
  24.        }
  25.    }
  26. }

Pero claro, como digo, los métodos "CmdAddTextGAIA", "CreateTrackPlayer", "OpenTrack", "CloseTrack", deben de estar definidos en alguno de los módulos que estan ejecutandose dentro de Spotify, que no son pocos según muestra Process Explorer: https://pastebin.com/qp8pha3H

Pero como digo no se como obtener dicho modulo, quizás este en el propio Spotify.exe... Voy a probar a usar algo de aquí, porque por lo visto Spotify se ha actualizado a una nueva version, la "1.1.10.540".  :rolleyes:

Un saludo.
Gracias por leer el tocho.
9  Foros Generales / Foro Libre / Re: Aumenta el número de jóvenes adictos. en: 17 Diciembre 2018, 01:32 am
Pues te la cascas bien cascá ;D ;D :laugh: :laugh:
10  Programación / Desarrollo Web / Re: levantar mi primera web en: 16 Diciembre 2018, 20:17 pm
Hostings:

https://www.awardspace.com/
https://x10hosting.com/
https://www.hostinger.es/#gref

Para aprender:

https://www.w3schools.com/
https://api.jquery.com/
https://www.sololearn.com/
https://codigofacilito.com/

Algunos CMS:

https://es.wordpress.com/
https://www.drupal.org/
https://www.simplemachines.org/

Backends REST:

https://symfony.es/
https://laravel.com/

(Mira que es una API REST, quizás prefieras esto antes que una web como tal :silbar:)

Que no quieres aprender a "programar" en HTML/CSS/JS/SQL, ni a programar en PHP, entonces tienes opciones gratuitas como:

https://www.foroactivo.com/
https://wordpress.com/start/user/es?ref=homepage
https://www.hazblog.com/ (de los mismos de Foroactivo)
https://www.blogger.com

Sigo?? :xD :xD



He hecho varias secciones (aqui cuento un poco mi opinión):

- Hostings:

- x10Hosting es de lo mejor, pero no esperes que gratuita seas el centro de atención del soporte, bueno con este ni con cualquier hosting...
- Hostinger es buena opción, pero como sea un proyecto dile adios a la rapidez, más que luego, como no tengas buenos filtros de spam y los de Hosntiger te cierren el subdominio por culpa de los ***** crawlers dile adios a todo... Haced backup chicos, es importante! ;)
- AwardSpace es de lo más reciente que he descubierto, pal que diga eso de que "los hostings gratuitos eran cosa del 2010" podrán ver que este es bueno también (algo así como 000webhost o eshost...) :P

- Sitios donde aprender
- CMS:

Como los que usa este foro (SimpleMachineForums), que son bien antiguos (aún así el core de la última version de SMF, si no mal recuerdo, es igual de antiguo, que quizás este, no se cuando fue la última actualización tocha de SMF pero hasta no hace mucho oí que siguen sin usar POO),
... y otros más novedosos como Drupal,
... y otros más pesados como Wordpress, aunque te aviso de una cosa, no hagas una página en Wordpress (si va a ser seria) a no ser que sepas lo que hagas, te puedes encontrar con cosas tan bonitas como: vulnerabilidades explotables en plugins, sobrecarga (si instalas muchos plugins) en el tiempo de carga y consumo de la página (te pueden agotar los datos del 3G/4G rapido), en fin... (los plugins matan este CMS)

Y luego por supuesto, opciones gratuitas con las que no tienes que calentarte la cabeza en el desarrollo, unicamente en el mantenimiento. :P

Pero vamos que para hacer un portafolio/portada de uno mismo yo optaría por Github... O Heroku, o algún servicio en la nube, o incluso tiraría de ArubaCloud, me instalaría un lamp o bien con nginx y a funcionar, por 1€ al mes... (es mejor que cualquier hosting premium) :P :P

Un saludo.
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 238
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines