Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

973
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda