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

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

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 Report

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 Report

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 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!