Línea de comandos de GCC detallada

  

1, gcc contiene el compilador c /c ++

gcc, cc, c ++, g ++ gcc y cc son iguales, c ++ y g ++ son iguales, programa c general Compile con gcc, programa c ++ compile con g ++

2, uso básico de gcc

gcc test.c Esto compilará un programa llamado a.out gcc test.c - o test compilará un programa llamado test -o parámetro para especificar el nombre del generador

3, ¿por qué hay una referencia indefinida al error 'xxxxx'?

En primer lugar, esto es un error de enlace, no un error de compilación. Es decir, si solo existe este error, significa que el código fuente de su programa no tiene ningún problema. Es incorrecto cuando compila con el compilador. No ha especificado el vinculador. Para usar la biblioteca, por ejemplo, si usa algunas funciones matemáticas en su programa, debe especificar el programa para vincular a la biblioteca matemática en los parámetros de compilación agregando -lm

4 a la línea de comandos de compilación. -l parámetro y -L parámetro

-l parámetro se utiliza para especificar la biblioteca a vincular con el programa, -l parámetro va seguido del nombre de la biblioteca, entonces ¿cuál es la relación entre el nombre de la biblioteca y el nombre real del archivo de la biblioteca? Tome la biblioteca de matemáticas, su nombre de biblioteca es m, su nombre de archivo de biblioteca es libm.so, es fácil ver que el encabezado de biblioteca nombre de archivo lib y tail.so se eliminan es el nombre de biblioteca

Bien, ahora sabemos cómo obtener el nombre de la biblioteca. Cuando necesitamos usar el nombre de biblioteca libtest.so proporcionado por un tercero, entonces solo necesitamos copiar libtest.so a /usr /lib y agregar el parámetro -ltest para compilar. , podemos usar la biblioteca libtest.so (por supuesto, usar la función en la biblioteca libtest.so, también necesitamos el archivo de encabezado asociado con libtest.so)

poner en /lib y /usr /lib Las bibliotecas en /usr /local /lib se pueden vincular directamente con el parámetro -l, pero si los archivos de la biblioteca no se ubican en estos tres directorios, sino en otros directorios, entonces solo usamos el parámetro -l. El enlace seguirá siendo incorrecto. El mensaje de error es probablemente: <quo; /usr /bin /ld: no se puede encontrar -lxxx ", es decir, el enlazador ld no puede encontrar libxxx.so en los 3 directorios, luego otro parámetro - L es útil, como la biblioteca X11 comúnmente utilizada, que se encuentra en el directorio /usr /X11R6 /lib, necesitamos usar los parámetros -L /usr /X11R6 /lib -lX11 al compilar, - El parámetro L va seguido del nombre del directorio donde se encuentra el archivo de la biblioteca. Por ejemplo, si colocamos libtest.so en el directorio /aaa /bbb /ccc, el parámetro de enlace es -L /aaa /bbb /ccc -ltest

Además, la mayoría de libxxxx.so es solo un enlace a RH9 es un ejemplo. Por ejemplo, los enlaces libm.so a /lib/libm.so.x, /lib/libm.so.6 y los enlaces a /lib/libm-2.3.2.so,

si no hay Dicho enlace aún irá mal, porque ld solo encontrará libxxxx.so, así que si desea usar la biblioteca xxxx, pero solo libxxxx.so.x o libxxxx-xxxso, puede hacer un enlace a ln -s libxxxx- Xxxso libxxxx.so

La escritura manual de parámetros de enlace siempre es muy problemática. Afortunadamente, muchos paquetes de desarrollo de bibliotecas proporcionan programas para generar parámetros de enlace. El nombre generalmente se llama xxxx-config, que generalmente se coloca en /usr /bin. En el directorio, por ejemplo, el generador de parámetros de enlace para

gtk1.2 es gtk-config. Puede obtener la siguiente salida ejecutando gtk-config --libs " -L /usr /lib -L /usr /X11R6 /Lib -lgtk -lgdk -rdynamic

-lgmodule -lglib -ldl -lXi -lXext -lX11 -lm ", este es el parámetro de enlace gtk necesario para compilar un programa gtk1.2, excepto xxx-config - Otro parámetro fuera del parámetro libs es --cf Lags se utiliza para generar el archivo de encabezado que contiene el directorio, que es el parámetro -I, que veremos a continuación. Puede intentar ejecutar gtk-config - libs --cflags para ver el resultado.

El problema ahora es cómo usar estos resultados de salida. La forma más estúpida es copiar y pegar o copiar, la forma inteligente es Agregue este `xxxx-config --libs --cflags` a la línea de comandos de compilación, como compilar un programa gtk: gcc gtktest.c` gtk-config --libs --cflags` Esto es casi lo mismo. Tenga en cuenta que `no es una sola cita, sino la que está a la izquierda de la tecla 1.

Además de xxx-config, los nuevos paquetes de desarrollo generalmente usan pkg-config para generar parámetros de enlace. El uso es similar a xxx-config, pero xxx-config es para un paquete de desarrollo específico, pero pkg- Config contiene la generación de parámetros de enlace para muchos paquetes de desarrollo. Use el comando pkg-config --list-all para enumerar todos los paquetes de desarrollo compatibles. El uso de pkg-config es pkg -config pagName --libs --cflags, donde pagName Es el nombre del paquete, que es una de las listas que figuran en pkg-config - list-all. Por ejemplo, el nombre de gtk1.2 es gtk +, pkg-

config gtk + --libs --cflags and gtk -config --libs --cflags es el mismo. Por ejemplo: gcc gtktest.c `pkg-config gtk + --libs --cflags`

5, -include e -I parámetros

-include se usa para incluir archivos de encabezado, pero en general Los archivos de encabezado de inclusión se implementan en el código fuente usando #include xxxxxx, y el parámetro -include se usa raramente. -I parámetro se usa para especificar el directorio del archivo de encabezado, generalmente no se especifica el directorio /usr /include, gcc sabe que debe ir allí para encontrar, pero si el archivo de encabezado no está en /usr /include, tenemos que usar el parámetro -I para especificar, como el encabezado El archivo se coloca en el directorio /myinclude. La línea de comandos de compilación agregará el parámetro -I /myinclude. Si no lo agrega, obtendrá un " xxxx.h: No existe tal archivo o directorio " error. El parámetro -I puede usar una ruta relativa, como el archivo de encabezado en el directorio actual, que se puede especificar con -I. El parámetro --cflags que mencionamos anteriormente se usa para generar el parámetro -I.

6, -O parámetro

Este es un parámetro de optimización de programa, generalmente se usa -O2 se usa para optimizar El programa utilizado, como gcc test.c -O2, el programa optimizado es más pequeño que el no optimizado, la velocidad de ejecución también puede mejorarse

7, el parámetro -shared se usa al compilar la biblioteca dinámica, como gcc -shared test.c -o libtest.so

8, varias variables de entorno relacionadas PKG_CONFIG_PATH: se usa para especificar la ruta del archivo de pc que usa pkg-config, el valor predeterminado es /usr /lib /pkgconf

Copyright © Conocimiento de Windows All Rights Reserved