Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: ALRAZ en 04 de Noviembre de 2007, 07:33:14 PM

Título: GCC: Opcion -fPIC?
Publicado por: ALRAZ en 04 de Noviembre de 2007, 07:33:14 PM
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 :)
Título: GCC: Opcion -fPIC?
Publicado por: aguspiza en 05 de Noviembre de 2007, 12:50:50 PM
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:
Título: GCC: Opcion -fPIC?
Publicado por: Mars Attacks en 05 de Noviembre de 2007, 10:48:11 PM
Pues bienvenido seas al foro y muy bonita forma de presentarte :)
Título: GCC: Opcion -fPIC?
Publicado por: ALRAZ en 06 de Noviembre de 2007, 01:59:10 AM
Cita de: aguspizaPues 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
Título: GCC: Opcion -fPIC?
Publicado por: aguspiza en 08 de Noviembre de 2007, 07:48:03 PM
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