No entiendo -Wl,-rpath -Wl,
Para mayor comodidad, agregué las páginas de manual relevantes a continuación.
Mi (mal) entendimiento primero: si necesito separar opciones con ,
, eso significa que la segunda -Wl
no es otra opción porque viene antes, ,
lo que significa que es un argumento para la -rpath
opción.
¡No entiendo cómo -rpath
se puede discutir -Wl,.
!
Lo que tendría sentido en mi opinión sería esto:
-Wl,-rpath .
Esto debería invocar -rpath
la opción del vinculador con el argumento del directorio actual.
hombre gcc:
-Wl,opción
Pase la opción como opción al vinculador. Si la opción contiene comas, se divide en varias opciones junto a las comas. Puede utilizar esta sintaxis para pasar un argumento a la opción. Por ejemplo,
-Wl,-Map,output.map
pasa-Map output.map
al vinculador. Cuando utilice el enlazador GNU, también puede obtener el mismo efecto con `-Wl,-Map=output.map'.
hombre ld:
-rpath=directorio
Agregue un directorio a la ruta de búsqueda de la biblioteca en tiempo de ejecución. Esto se utiliza al vincular un ejecutable ELF con objetos compartidos. Todos los argumentos -rpath se concatenan y se pasan al vinculador en tiempo de ejecución, que los utiliza para localizar objetos compartidos en tiempo de ejecución. La opción -rpath también se utiliza al localizar objetos compartidos que son necesarios para los objetos compartidos incluidos explícitamente en el enlace;
La -Wl,xxx
opción para gcc pasa una lista de tokens separados por comas como una lista de argumentos separados por espacios al vinculador . Entonces
gcc -Wl,aaa,bbb,ccc
eventualmente se convierte en una llamada de enlazador
ld aaa bbb ccc
En su caso, desea decir " ld -rpath .
", por lo que pasa esto a gcc como -Wl,-rpath,.
Alternativamente, puede especificar instancias repetidas de -Wl
:
gcc -Wl,aaa -Wl,bbb -Wl,ccc
Tenga en cuenta que no hay coma entre aaa
y el segundo -Wl
.
O, en su caso, -Wl,-rpath -Wl,.
.
También podrías escribir
-Wl,-rpath=.
Para deshacerse de ese molesto espacio. Podría decirse que es más legible que agregar comas adicionales (es exactamente lo que se pasa a ld).