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

982
Vistas
reubicación contra xxx en la sección de solo lectura '.text' - compilador incorrecto o configuración de linux en SUSE?

No soy un usuario frecuente de Linux y creo que hice algo mal.

Este es el código para una biblioteca dinámica de prueba ".so" que estoy generando.

 class InternalClass { public: int Function(){ return 10; } }; extern "C" { int WrapperFunctionSimple() { return 10; } void WrapperCreateInstance() {InternalClass* item = new InternalClass(); delete item; } }

La compilación falla con el siguiente error:

 g++ -Wall -fexceptions -O2 -c /home/lidia/compartida/TestLibrary/TestLibrary/main.cpp -o obj/Release/main.o g++ -shared obj/Release/main.o -o bin/Release/libTestLibrary.so -s /usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: obj/Release/main.o: warning: relocation against `_Znwm@@GLIBCXX_3.4' in read-only section `.text' /usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: obj/Release/main.o: relocation R_X86_64_PC32 against symbol `_Znwm@@GLIBCXX_3.4' can not be used when making a shared object; recompile with -fPIC /usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: final link failed: bad value collect2: error: ld returned 1 exit status

Probé con -fPIC como se sugiere y compila. Pero cuando uso esta biblioteca, no se puede cargar cuando agrego esa última función:

 void WrapperCreateInstance() {InternalClass* item = new InternalClass(); delete item; }

El problema es usar InternalClass, sin esta función todo funciona.


Estoy usando VirtualBox. Instalé OpenSUSE de 64 bits, la aplicación que usa la biblioteca también es de 64 bits. En otra distribución de Linux (Mint), con exactamente el mismo proyecto y configuración (sin fPIC), se puede compilar. Cuando uso esa biblioteca (.so) funciona en SUSE.

También estoy usando:

  • gcc (SUSE Linux) 7.5.0
  • g++ (SUSELinux) 7.5.0
  • Mi IDE es Code::Blocks 20 (última versión). Las configuraciones están vacías excepto por el indicador -m64.

¿Qué estoy haciendo mal? Esto parece algo que los usuarios avanzados de Linux podrían ayudarme a entender.

EDITAR: Para agregar más información, esto puede compilarse en Ubuntu con la misma configuración. No en SUSE

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

0

Esto generalmente significa que no tiene todas las funciones definidas. Un mejor mensaje de error estaría bien, pero esto es lo que tenemos por ahora. Defina todas las funciones utilizadas, y debería estar listo para comenzar.

over 4 years ago · Santiago Trujillo Denunciar

0

Me pasó cuando usé GCC para compilar un archivo CPP. Entonces, para los archivos C ++, use solo g ++, y obviamente no GCC, que está destinado a archivos c.

over 4 years ago · Santiago Trujillo Denunciar

0

A mí me pasó, si una biblioteca (A) depende de otra (B) y la biblioteca A estaba enlazada antes que la biblioteca B. La solución es enlazar primero la biblioteca B y luego la A.

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