# Dudas sobre CFLAGS y LDFLAGS

## antogc

buenas a todos....he estado leyendo al respecto de esta opcion de las CFLAGS y no me queda nada claro su utilidad, peligrosidad y si se debe poner o no......en el wiki de gentoo donde se dice la configuración en función del procesador que tiene te viene la opción...pero no estoy seguro de ponerla o no....q decis al respecto???

----------

## antogc

por cierto la pagina antes mencionada

http://gentoo-wiki.com/Safe_Cflags#Intel_Core_2_Duo.2FQuad_.2F_Xeon_51xx.2F53xx.2C_Pentium_Dual-Core_Exxxx

----------

## ekz

Aquí también puedes leer más sobre esa CFLAG (y otras además)

http://gentoo-wiki.com/CFLAGS#-fomit-frame-pointer

http://gentoo-wiki.com/CFLAGS_matrix

En el wiki, hay una gran advertencia que dice

 *Quote:*   

> 
> 
> WARNING: THIS PAGE IS FOR SAFE FLAGS ONLY.
> 
> Please do not include any flags that aren't 100% safe. Just because it works for you doesn't mean it will for everyone else.
> ...

 

Así que no debería ser peligrosa esa CFLAG, incluso para la arquitectura amd64 viene incluída por defecto (dentro de -O2).

Saludos

EDIT: Me llamó la atención esta use de glibc:

 *Quote:*   

> 
> 
> glibc-omitfp : Configure glibc with --enable-omitfp which lets the build system determine when it is safe to use -fomit-frame-pointer

 

----------

## achaw

Yo creo que si no tenes mucha idea de lo que son las CFLAGS, uses las seguras pasadas en los links por nuestros compañeros. De echo, no son magicas, no hacen milagros y seguramente ni notas la diferencia. No es bueno subir de a tres escalones a la ves.

Saludos

----------

## i92guboj

A veces me da la impresión de que algunos creen que los CFLAGS son entidades mágicas que solo existen en Gentoo.

Las CFLAGS son tan solo parámetros que se pasan a gcc al ir a compilar un programa. Y ¿que es lo mejor cuando necesitamos información de un determinado programa? Pues una buena forma de empezar es la página de manual. Y gcc no es una excepción. En la página man de gcc tienes todo lo que se necesita conocer sobre cada uno de los flags que gcc admite, incluyendo -fomit-frame-pointer, por supuesto.

También incluye claramente que dicho flag se activa por defecto con -O2 en las arquitecturas en las cuales no hay conflicto con la depuración (por ejemplo, amd64).

Por último, el consejo del pesado de i92guboj: si tras leer la página man no entiendes lo que las CFLAGS hacen, lo más lógico sería no tocarlas. Las que van por defecto funcionan perfectamente bien, y además, los programadores incluyen las que creen mejores para cada parte de sus programas en los Makefiles. Si cambiamos alguna, que sea porque sabemos algo que los programadores no saben. Si consideras que dicha condición no se cumple, entonces la opción inteligente es no tocarlas.

----------

## antogc

muchas gracias compañeros como siempre....tal vez me precipite en la pregunta y debería a ver mirado algunos manuales...pro los que lei me sono un poco a chino jejeje....pro weno poco a poco....

gracias!

----------

## nestormh

Hola, estoi editando en make.conf y tengo un prescott 32bits.

Creo haber leido que la opcion see3 no viene habilitada por defecto en "march=prescott",puede ser?

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=prescott -msse3 -O2 -ffast-math -pipe -fomit-frame-pointer"

CXXFLAGS="${CFLAGS} -frepo"

LDFLAGS="-Wl,-Ol"

Pondriais alguna cflag mas alguna ldflag mas?¿?¿ O cambiariais algo?¿?quiero que sea estable,eso si. Pero lo mas arreglado posible..

Gracias

----------

## gringo

 *Quote:*   

> glibc-omitfp : Configure glibc with --enable-omitfp which lets the build system determine when it is safe to use -fomit-frame-pointer

 

con las nuevos glibc hubo algún problema si usabas esa USE :

http://blog.flameeyes.eu/articles/2007/11/17/users-are-just-never-happy

saluetes

----------

## gringo

 *Quote:*   

> Creo haber leido que la opcion see3 no viene habilitada por defecto en "march=prescott",puede ser? 

 

no estoy seguro pero creo que ningún target actual habilita sse3 por defecto.

 *Quote:*   

> -ffast-math 

 

tu mismo, pero es absurdo ponerlo globalmente. Para las aplicaciones donde puede dar un plus en rendimiento, los ebuilds ya lo activan por defecto.

 *Quote:*   

> CXXFLAGS="${CFLAGS} -frepo" 

 

esto lo probé una vez hace siglos y rompía algunas aplicaciones ( mplayer que recuerde ahora mismo)

 *Quote:*   

> LDFLAGS="-Wl,-Ol" 

 

no uses ldflags a menos que sabes lo que haces. 

 *Quote:*   

> Pondriais alguna cflag mas alguna ldflag mas?¿?¿ O cambiariais algo?¿?quiero que sea estable,eso si.

 

si quieres que sea estable vete a la wiki y usa unos flags estables, no uses flags que no sabes que hacen.

http://www.gentoo.org/doc/es/gcc-optimization.xml

saluetes

----------

## nestormh

vale, deacuerdo. En cuanto a las ldflags ya se que no estan soportadas oficialmente y pueden dar problemas... pero por lo que la gente dice y la web de safe ldflags.. las ldflags que en teoria funcionarian correctamente serian esas -Wl,-O1

Otra cosa, en mi arquitectura si pongo --> -march=prescott -mtune=prescott -mfpmath=sse  alguna mas¿?

He estado mirando esta web del foro pero no me queda muy claro que usar con mi prescott, haber si alguien me aclara las dudas porfavor.

http://64.233.183.104/search?q=cache:ddmQADOwf0sJ:forums.gentoo.org/viewtopic-t-448761-highlight-core%2Bduo.html+gcc+i686+sse+sse2+sse3&hl=es&ct=clnk&cd=14&gl=es

Muchas gracias de antemano

----------

## gringo

como te comenté arriba, en la wiki hay una relación de flags estables :

http://gentoo-wiki.com/Safe_Cflags#Pentium_4_.28Prescott.29_.2F_Celeron_D

empieza por algo simple y si luego ves que quieres juguetear y sabes las implicaciones de usar cosillas no soportadas, siempre podrás añadir lo que quieras.

saluetes

----------

## i92guboj

 *nestormh wrote:*   

> vale, deacuerdo. En cuanto a las ldflags ya se que no estan soportadas oficialmente y pueden dar problemas... pero por lo que la gente dice y la web de safe ldflags.. las ldflags que en teoria funcionarian correctamente serian esas -Wl,-O1
> 
> Otra cosa, en mi arquitectura si pongo --> -march=prescott -mtune=prescott -mfpmath=sse  alguna mas¿?
> 
> He estado mirando esta web del foro pero no me queda muy claro que usar con mi prescott, haber si alguien me aclara las dudas porfavor.
> ...

 

En lo que a mi respecta, este hilo es un duplicado de este otro, que para más inri es de ayer mismo:

https://forums.gentoo.org/viewtopic-t-667595.html

--Editado por Stolz: He unido los dos mensajes y he cambiado el título

Por lo demás, lee la página man de gcc. La mitad de las dudas que tienes son triviales.

 *nestormh wrote:*   

> Hola, estoi editando en make.conf y tengo un prescott 32bits.
> 
> Creo haber leido que la opcion see3 no viene habilitada por defecto en "march=prescott",puede ser?
> 
> 

 

Esta es una de las dudas que se arreglan con man gcc:

 *página de manual de gcc wrote:*   

> 
> 
>            prescott
> 
>                Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3
> ...

 

Por tanto, dicho flag es redundante, e inútil.

 *Quote:*   

> 
> 
> CFLAGS="-march=prescott -msse3 -O2 -ffast-math -pipe -fomit-frame-pointer"
> 
> CXXFLAGS="${CFLAGS} -frepo"
> ...

 

Otro en busca de la bomba nuclear segura   :Twisted Evil:  A ver si nos damos cuenta de que eso no existe   :Laughing: 

-ffast-math te va a dar problemas, y aparte, es absurdo su uso de forma global. En muchos casos vas a obtener código más lento, en otros muchos, código roto, en otros casos, paquetes que son dependencias lejanas van a fallar porque otro paquete se compiló con este flag. Tú mismo con tu mecanismo.

El uso de ldflags, como bien sabes, no está soportado. Si algo te falla, lo primero que te van a pedir es que des tu emerge --info. Y al ver tus flags, que recompiles tu sistema completo sin flags no soportados antes de volver a reportar un bug o pedir auxilio en el foro. Solo es un consejo, tu haces lo que tú prefieras que para eso somos libres  :Smile: 

 *nestormh wrote:*   

> 
> 
> Otra cosa, en mi arquitectura si pongo --> -march=prescott -mtune=prescott -mfpmath=sse  alguna mas¿?
> 
> 

 

Sobre -mfpmath. Más de lo mismo. sse es el predeterminado para un compilador x86_64. Es decir, otro flag superfluo e inútil que podrías haberte ahorrado simplemente mirando al manual. En fin... la próxima vez será  :Razz: 

----------

## the incredible hurd

 *i92guboj wrote:*   

> Sobre -mfpmath. Más de lo mismo. sse es el predeterminado para un compilador x86_64. Es decir, otro flag superfluo e inútil que podrías haberte ahorrado simplemente mirando al manual. En fin... la próxima vez será

 

 *nestormh wrote:*   

> CHOST="i686-pc-linux-gnu"

 

No te precipites tanto i92guboj; yo tuve mfpmath=sse durante una buena temporada en 32bits y no da el más mínimo problema. Advierten que dará problemas en código que espere una precisión de 80bit (como la del 387), dado que con mfpmath=sse sólo se obtiene una precisión de 64bit.

No tiene mucho sentido aplicarla de forma global a pesar de todo, no se obtiene ni la más mínima diferencia de rendimiento apreciable, los 387 de nuestros procesadores también funcionan y muy bien. Haz pruebas con cualquier aplicación de calculadora y sus librerías.

Con respecto a las LDFLAGS, veo que corregiste la primera -Ol y pusiste -O1 en el segundo... Te sugiero estas:

LDFLAGS="-Wl,-O1,-s"

(Al menos a mí no me han dado el más mínimo problema)

Te sugiero también que añadas en make.conf

EXTRA_ECONF="--with-gnu-ld"

y que hagas esto, bah, me he hartado de intentar citarme a mi mismo, lo que puse en Errores comunes con Gentoo con respecto a libtool.

(Que te haga consultar este hilo no es casual)

Con ello usarás el enlazador optimizado a tope, aunque sólo beneficiará en los tiempos de carga, nada más.

----------

## ekz

Porfin explicaciones que me convencen de sacar -ffast-math de mis cflags, porque hace tieeeempo y de un día para otro comenzó a ser una cflag "dañina", jeje. (desde un update de portage recuerdo)

Saludos

----------

## gringo

 *Quote:*   

> Porfin explicaciones que me convencen de sacar -ffast-math de mis cflags

 

realmente por mucho que lo tengas en tu make.conf, habrá ebuilds que ya lo deshabiliten porque se sabe que si se compilan con -ffast-math ( por seguir con el ejemplo) el software no funcionará. Ahora no tengo ningún ejemplo concreto pero buscad por la eclass flag-o-matic si os interesa el tema.

 *Quote:*   

> LDFLAGS="-Wl,-O1,-s" 

 

umm, he buscao un poco y no he encontrao nada pero creo que -s ( al igual que enable-new-dtags p.ej. ) están habilitadas por defecto en gentoo, puede ser ?

 *Quote:*   

> EXTRA_ECONF="--with-gnu-ld" 

 

no sé si entiendo bien lo que hace esto, pero creo que en gentoo siempre se ha usado por defecto tb. , no ?

saluetes

----------

## i92guboj

 *the incredible hurd wrote:*   

>  *i92guboj wrote:*   Sobre -mfpmath. Más de lo mismo. sse es el predeterminado para un compilador x86_64. Es decir, otro flag superfluo e inútil que podrías haberte ahorrado simplemente mirando al manual. En fin... la próxima vez será 
> 
>  *nestormh wrote:*   CHOST="i686-pc-linux-gnu" 
> 
> No te precipites tanto i92guboj; yo tuve mfpmath=sse durante una buena temporada en 32bits y no da el más mínimo problema. Advierten que dará problemas en código que espere una precisión de 80bit (como la del 387), dado que con mfpmath=sse sólo se obtiene una precisión de 64bit.
> ...

 

No dije -mfpmath=sse diera problemas, aunque si, potencialmente:

1.- da problemas

2.- hace que tus programas pierdan precisión, quizás no es un problema para tí, pero si para algunos

Pero lo dicho, arriba no he mencionado que dicho flag diera problemas. Solo dije que es un flag inútil en x86_64, porque de hecho es lo predeterminado. Por tanto, lo dicho más arriba de este flag es completamente correcto, y tan solo hay que mirar la man page para confirmarlo.

----------

## i92guboj

 *i92guboj wrote:*   

>  *the incredible hurd wrote:*    *i92guboj wrote:*   Sobre -mfpmath. Más de lo mismo. sse es el predeterminado para un compilador x86_64. Es decir, otro flag superfluo e inútil que podrías haberte ahorrado simplemente mirando al manual. En fin... la próxima vez será 
> 
>  *nestormh wrote:*   CHOST="i686-pc-linux-gnu" 
> 
> No te precipites tanto i92guboj; yo tuve mfpmath=sse durante una buena temporada en 32bits y no da el más mínimo problema. Advierten que dará problemas en código que espere una precisión de 80bit (como la del 387), dado que con mfpmath=sse sólo se obtiene una precisión de 64bit.
> ...

 

----------

