alguien tenía ningún éxito conseguir encabezados precompilados que trabajan con GCC? No he tenido suerte en mis intentos y no he visto muchos buenos ejemplos de cómo configurarlo. He probado cygwin gcc 3.4.4 y estoy usando 4.0 en Ubuntu.encabezados precompilados con GCC
Respuesta
He conseguido encabezados precompilados que trabaja bajo gcc una vez en el pasado, y yo recuerdo haber problemas en ese momento también. Lo que hay que recordar es que gcc ignorará el archivo (header.h.gch o similar) si no se cumplen ciertas condiciones, una lista de la que se puede encontrar en la gcc precompiled header documentation page.
Generalmente es más seguro tener su sistema de construcción compilar el archivo .gch como un primer paso, con las mismas opciones de línea de comandos y ejecutables como el resto de su fuente. Esto asegura que el archivo esté actualizado y que no haya diferencias sutiles.
Probablemente también sea una buena idea hacerlo funcionar primero con un ejemplo artificial, solo para eliminar la posibilidad de que sus problemas sean específicos del código fuente de su proyecto.
llamada gcc misma manera como usted lo llama para su archivo de origen pero con un archivo de cabecera.
p. Ej.
g++ $(CPPFLAGS) test.h
Esto genera un archivo llamado test.h.gch
búsquedas gcc Cada vez test.h para que se vea por primera vez para test.h.gch y si encuentra que se utiliza de forma automática.
Más información se puede encontrar bajo GCC Precompiled Headers
Estoy usando gcc 3.4 y la línea g ++ stdafx.h no compilará, obtendrá el error "g ++: compilación del archivo de encabezado solicitado", pero esto se compilará, aunque no estoy seguro si eso es lo que quiero: "g ++ -c - x C++ stdafx.h -o stdafx.h.pch " – stefanB
Firstly, see the documentation here.
Compila encabezados como cualquier otro archivo pero coloca la salida dentro de un archivo con un sufijo de .gch
.
Así por ejemplo, si precompila stdafx.hy tendrá un encabezado precompilado que se buscan automáticamente llamada stdafx.h.gch
en cualquier momento que incluya stdafx.h
Ejemplo:
stdafx.hy:
#include <string>
#include <stdio.h>
a.cpp:
#include "stdafx.h"
int main(int argc, char**argv)
{
std::string s = "Hi";
return 0;
}
A continuación, los datos como:
> g++ -c stdafx.h -o stdafx.h.gch
> g++ a.cpp
> ./a.out
Su compilación funcionará incluso si se quita stdafx.hy después del paso 1.
¡Gracias por dar un ejemplo de trabajo! – nobar
definitivamente he tenido éxito. En primer lugar, he utilizado el siguiente código:
#include <boost/xpressive/xpressive.hpp>
#include <iostream>
using namespace std;
using namespace boost::xpressive;
//A simple regex test
int main()
{
std::string hello("hello world!");
sregex rex = sregex::compile("(\\w+) (\\w+)!");
smatch what;
if(regex_match(hello, what, rex))
{
std::cout << what[0] << '\n'; // whole match
std::cout << what[1] << '\n'; // first capture
std::cout << what[2] << '\n'; // second capture
}
return 0;
}
Esto fue sólo un hola mundo de Boost Xpressive (ver más abajo para el enlace).Primero, compilé con la opción -H
en gcc. Mostraba una enorme lista de encabezados que usaba. Entonces, tomé un vistazo a las banderas de compilación mi IDE (Code :: Blocks) estaba produciendo y vi algo como esto:
g++ -Wall -fexceptions -g -c main.cpp -o obj/Debug/main.o
Así que escribió un comando para compilar el archivo Xpressive.hpp con la exacta mismas banderas:
sudo g++ -Wall -fexceptions -g /usr/local/include/boost/xpressive/xpressive.hpp
que compilan el código original de nuevo con el -H
y consiguieron este resultado:
g++ -Wall -fexceptions -H -g -c main.cpp -o obj/Debug/main.o ! /usr/local/include/boost/xpressive/xpressive.hpp.gch main.cpp . /usr/include/c++/4.4/iostream .. /usr/include/c++/4.4/x86_64-linux-gnu/bits/c++config.h .. /usr/include/c++/4.4/ostream .. /usr/include/c++/4.4/istream main.cpp
¡El! significa que el compilador pudo usar el encabezado precompilado. Una x significa que no fue capaz de usarlo. Usar los indicadores de compilación apropiados es crucial. Me quité el -H y realicé algunas pruebas de velocidad. El encabezado precompilado tuvo una mejora de 14 segundos a 11 segundos. No esta mal, pero tampoco grandioso.
Nota: Aquí está el enlace al ejemplo: http://www.boost.org/doc/libs/1_43_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.examples No pude conseguir que funcione en la publicación.
BTW: estoy usando el siguiente g ++
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Total de salvavidas, muchas gracias! –
Agregar -Winvalid-pch lo ayudará a depurar si y por qué algo va mal en el uso de PCH. – lefticus
Gracias por esta información, ¡muy útil! –
Para generar el PCH en lugar de utilizar -x c++
uso -x c++-header
.
pch.h:
<put your common include files here>
pch.cpp:
#include "pch.h"
generar PCH:
g++ -x c++-header -o pch.h.gch -c pch.cpp
El pch.h.gch debe estar en el mismo directorio que el pch.h!
Esto debería ser '-c pch.h', no' -c pch.cpp'? –
- 1. Encabezados precompilados con Autotools
- 2. Encabezados precompilados
- 3. Encabezados precompilados con C y C mixtos
- 4. Sin aceleración con encabezados precompilados en gcc (pero gran aceleración con Visual Studio)
- 5. Encabezados precompilados en archivos de encabezado
- 6. Cómo implementar encabezados precompilados en su proyecto
- 7. Compartir encabezados precompilados de manera eficiente
- 8. ¿Por qué utilizar encabezados precompilados (C/C++)?
- 9. ¿Qué contienen los encabezados precompilados de Visual Studio?
- 10. Pregunta sobre los encabezados precompilados en Visual C++
- 11. ¿Es seguro eliminar la carpeta "ipch" - encabezados precompilados?
- 12. Deshabilitar encabezados precompilados para un archivo específico en un proyecto de VC++ 2010
- 13. ¿Hay alguna manera de usar encabezados precompilados en VC++ sin requerir stdafx.h?
- 14. ¿Cuáles son los pros y los contras de los encabezados precompilados específicamente en un entorno GNU/Linux/cadena de herramientas?
- 15. GCC/Make Build Time Optimizations
- 16. Creando varios archivos de encabezado precompilados utilizando GNU make
- 17. Encabezados personalizados con pycurl
- 18. window.open con los encabezados
- 19. rieles Cómo subir activos precompilados a Cloudfront
- 20. Compilar para entorno independiente con GCC
- 21. GCC con Visual Studio?
- 22. std :: regex_iterator con gcc
- 23. Enviando encabezados http con python
- 24. VideoView con cookies (o encabezados)
- 25. Ruby https POST con encabezados
- 26. son binarios gcc-3 compatibles con gcc-4
- 27. Evaluación parcial/especialización con LLVM-gcc o gcc
- 28. ¿Cómo puedo controlar la forma en que gcc/g ++ incluye automáticamente los encabezados?
- 29. ¿Cómo compilar MPI con gcc?
- 30. Usando Homebrew con GCC alternativo
Lo probé y tuve el caso de uso óptimo para los encabezados precompilados porque mi fuente c es generada por el compilador y no escrita por el usuario. Sun Studio y especialmente Visual Studio mejoraron mucho el tiempo de construcción. En gcc empeoraba aún sin encabezados precompilados. Esto fue con 3.4 no has testet con 4.x pero la velocidad y gcc son mutuamente excluyentes. – Lothar
@Lothar ¿cuál era el código? Encuentro g ++ aproximadamente 10 veces más rápido que los compiladores recientes de Visual Studio, en algunos códigos con muchas plantillas. –
No estoy usando plantillas en mi código C++. Es solo manejo de excepciones C + + bonitas extensiones de C++. Incluso ahora, 6 años después de esta pregunta VS2010 es una magnitud más rápida. Pero mientras tanto tengo 16 núcleos para poder vivir con eso. – Lothar