2011-12-12 8 views
60

gcc y ld proporcionan muchas formas de especificar una ruta de búsqueda para las bibliotecas, entre ellas las banderas -rpath y -L. Las páginas de manual no revelan diferencias entre estos dos indicadores, diciendo efectivamente que cada indicador agrega una biblioteca a la ruta de búsqueda de la biblioteca. Sin embargo, parece extraño que ambas banderas hagan exactamente lo mismo . ¿Cuáles son las diferencias, si las hay, entre estas dos opciones?¿Cuál es la diferencia entre -ruta y -L?

+1

¿Quizás estás pensando en '-rpath-link'? – ams

Respuesta

68

Usted debe estar leyendo algunas copias no actualizadas de las páginas de manual (énfasis añadido):

-rpath = dir
            añadir un directorio a la ruta de búsqueda de bibliotecatiempo de ejecución. Esto se usa
            cuando se vincula un ejecutable ELF con objetos compartidos. Todo -rpath
            argumentos se concatenan y se pasa al tiempo de ejecución enlazador, que
            les utiliza para localizar objetos compartidos en tiempo de ejecución .

vs

-L searchdir
--library-path = searchdir
            Añadir searchdir ruta de la lista de rutas que ld buscará los
            bibliotecas de archivos y scripts de control ld.

Así, -L dice ld dónde buscar bibliotecas para enlazar con al vincular. Se usa esto (por ejemplo) cuando compila contra bibliotecas en su árbol de compilación, que se colocará en las rutas normales de la biblioteca del sistema al make install. --rpath, por otro lado, almacena esa ruta dentro del ejecutable, de modo que el enlazador dinámico de tiempo de ejecución pueda encontrar las bibliotecas. Usted usa esto cuando sus bibliotecas están fuera de la ruta de búsqueda de la biblioteca del sistema.

+7

Notas: 1. La mayoría de las veces, cuando se necesita '-rpath =/some/weird/path', también se necesita' -L/some/weird/path'. 2. Con 'gcc' uno necesita usar' -Wl, -rpath = dir'. –

+2

Todavía no entiendo por qué se necesitan ambos. Tengo la misma experiencia que n.m. encima. ¿Qué información se necesita de la biblioteca en tiempo de compilación? Además de posibles h-files, de causa. Pero eso es otra cosa que supongo ... –

+1

@FredrikJohansson Ese sería un tema razonable para una nueva pregunta (suponiendo que no se haya preguntado ya, por supuesto). Los símbolos disponibles son necesarios, al menos, pero probablemente haya otras cosas. – derobert

Cuestiones relacionadas