Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

381
Vistas
apxs creador de módulo apache compila bibliotecas en objeto compartido linux/unix

Estoy tratando de crear un nuevo módulo Apache 2, para contener una pieza compleja de software. El código consta de mis propios archivos C, que se compilan en archivos .o y luego se vinculan a un archivo .so. El problema es que mi código usa tcl para manejar las secuencias de comandos. Hasta ahora, he compilado el tcl (versión 8.4.13, sí, es tan antiguo) en un archivo .a y lo vinculé a los archivos .o para crear un solo archivo .so, que Apache carga como un módulo. y todas las obras. Encontré esto complicado en el sistema basado en Mac BSD, pero finalmente pude hacerlo funcionar: 1. Compilando tcl con --enable-threads --disable-shared --disable-corefoundation options 2. Vincula los archivos .o de mi código a la biblioteca tcl con esto:

gcc -DSHARED_MODULE -bundle -undefined suprimir -flat_namespace -o mod_anastasia.so Release/*.o libtcl8.5.a

Esto funciona para BSD/Mac. Entonces ahora necesito compilar este módulo para un servidor Linux. Aquí está el comando apxs que debería (en teoría) funcionar:

apxs -i -c mod_anastasia.c ana_browsegrove.c libtcl8.4.a

Esto da la siguiente advertencia:

* Advertencia: ¡La vinculación de la biblioteca compartida mod_anastasia.la con la biblioteca estática libtcl8.4.a no es portátil!*

Y, efectivamente, cuando intento cargar el archivo .so creado en Apache, aparece este error:

httpd: error de sintaxis en la línea 156 de /usr/local/apache2/conf/httpd.conf: no se pueden cargar módulos/mod_anastasia.so en el servidor: /usr/local/apache2/modules/mod_anastasia.so: símbolo indefinido: acos

Entonces, mi pregunta... ¿alguien sabe la fórmula mágica para compilar un archivo .a para que Apache pueda vincularlo a archivos .o creados por apxs?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

acos() es una función de libm . Debe especificar que su biblioteca compartida también necesita vincular libm para satisfacer sus requisitos.

Intenta compilar de esta manera:

 apxs -i -c mod_anastasia.c ana_browsegrove.c libtcl8.4.a -lm

Esto debería solucionar su problema de símbolo indefinido .

Para la otra advertencia: también podría intentar vincular la versión compartida de la biblioteca tcl reemplazando libtcl8.4.a por -ltcl8.4 (si la biblioteca tcl correspondiente está instalada correctamente en el sistema). Vincular bibliotecas estáticas a una biblioteca compartida puede ser problemático y debe evitarse.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda