Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

380
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!