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

105
Vistas
LD_PRELOAD y variable local de hilo

Tengo una biblioteca compartida (libtest.cpp) y un programa simple (test.cpp). Quiero que compartan una variable local de hilo gVar . La biblioteca compartida está vinculada a través de LD_PRELOAD.

Aquí está mi código para la biblioteca compartida libtest.cpp:

 #include<stdio.h> __thread int gVar; void print_gVar(){ printf("%d\n", gVar); }

A continuación se muestra el código para test.cpp.

 #include<stdio.h> __thread int gVar; void __attribute__((weak)) print_gVar(); int main(){ gVar = 10; print_gVar(); return 0; }

Y uso el siguiente script para compilarlos y ejecutarlos.

 g++ -g -shared -fPIC -olibtest.so libtest.cpp g++ -g -fPIC -o test test.cpp LD_PRELOAD=./libtest.so ./test

El resultado esperado es 10 porque la asignación en test.cpp afectará el gVar en libtest.cpp. Sin embargo, solo obtuve 0. Parece que gVar en libtest.cpp y gVar en test.cpp no están vinculados.

Hice algunas pruebas adicionales:

Si agrego __attribute__((weak)) a la declaración de gVar en cualquiera de los archivos, el resultado sigue siendo 0.

Si __thread de ambos archivos, el resultado es 10 (correcto).

Si agrego extern y __attribute__((weak)) a la declaración de gVar en libtest.cpp, habrá una falla de segmentación.

Supongo que debe haber algo mal con LD_PRELOAD y __thread . Pero no puedo descifrarlo.

¿Alguien podría decirme cómo puedo hacer que funcione? ¡Muchos gracias!

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

0

Esto no es posible, ya que el almacenamiento local de subprocesos requiere una inicialización por subproceso.

LD_PRELOAD cargará la biblioteca incluso antes de que se cargue la biblioteca estándar, lo que arruina la inicialización de TLS.

Actualizar:

Lea las secciones 2 y 3 de Manejo de ELF para almacenamiento local de subprocesos

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