Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





GCC: Opcion -fPIC?

Iniciado por ALRAZ, 04 de Noviembre de 2007, 07:33:14 PM

« anterior - próximo »

ALRAZ

Wenas!
Tenía rato que no me aparecía por aquí. Esta ves vengo con una dudilla sobre el compilador GNU GCC que viene con ubuntu.

Sucede que estoy haciendo una DLL que compila tanto en Güindous como en Linux.
La cosa está en que cuando compilo con Linux, el linker me marca el siguiente error:


/usr/bin/ld: ./obj/yg_aux.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC


Buen, lo solucioné agregando la dichosa opción -fPIC en los comandos de compilación, pero tengo curiosidad por saber qué es lo que hace esa opción exactamente.


Como nota adicional, comentar que estoy usando code::blocks en Ubuntu 7.10 para AMD64.

Gracias por sus comentarios y sugerencias :)

aguspiza

Pues si tienes curiosidad y sabes un poquito de ingles aqui hay algunas razones de por que:

http://www.swig.org/Doc1.3/Python.html#Python_nn10
http://www.swig.org/Doc1.3/Python.html#Python_nn11
http://en.wikipedia.org/wiki/Position_independent_code

Basicamente es que la arquitectura AMD64 en Linux necesita codigo relocalizable (relocalizable sin necesidar de ejecutar un setup). Por cierto recuerda linkar a /usr/lib64 si haces librerias para AMD64

P.D: Este es mi primer mensaje por aqui, asi que aprovecho para saludar. Me he registrado para intentar hacer un prototipo de juego con CRM32Pro antes de que se lance metaplace y poder ir avanzando algo. Estaba intentando hacerme el wrapper con swig para python y por eso di con esta informacion :wink:

Mars Attacks

Pues bienvenido seas al foro y muy bonita forma de presentarte :)

ALRAZ

Cita de: "aguspiza"Pues si tienes curiosidad y sabes un poquito de ingles aqui hay algunas razones de por que:

http://www.swig.org/Doc1.3/Python.html#Python_nn10
http://www.swig.org/Doc1.3/Python.html#Python_nn11
http://en.wikipedia.org/wiki/Position_independent_code

Basicamente es que la arquitectura AMD64 en Linux necesita codigo relocalizable (relocalizable sin necesidar de ejecutar un setup). Por cierto recuerda linkar a /usr/lib64 si haces librerias para AMD64

P.D: Este es mi primer mensaje por aqui, asi que aprovecho para saludar. Me he registrado para intentar hacer un prototipo de juego con CRM32Pro antes de que se lance metaplace y poder ir avanzando algo. Estaba intentando hacerme el wrapper con swig para python y por eso di con esta informacion :wink:

Interezantes links, muchas gracias :D

con lo de /usr/lib64 te refieres a las librerías ya compiladas (los .so)?
porque veo que mi ubuntu tiene un symlink de lib64 que apunta a lib
es decir, /usr/lib64 es lo mismo que /usr/lib

aguspiza

Depende de la distribucion, normalmente el problema es el contrario, como en tu caso, cuando quieras compilar para x86 debes usar las /usr/lib32 ya que /usr/lib es un symlink a /usr/lib64.

Ejemplo y mejor explicacion aqui (ingles sorry):
http://wiki.winehq.org/WineOn64bit






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.