Para mayor comodidad, agregué las páginas de manual relevantes a continuación.
Mi (mal) entendimiento primero: si necesito separar las 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
puede tener una -Wl,.
discusión!
Lo que tendría sentido en mi mente sería esto:
-Wl,-rpath .
Esto debería invocar la opción de enlace -rpath con el argumento del directorio actual.
hombre gcc:
-Wl, opción
Opción de pase como una opción para el vinculador. Si la opción contiene comas, se divide en varias opciones en las comas. Puede usar esta sintaxis para pasar un argumento a la opción. Por ejemplo,
-Wl,-Map,output.map
pasa-Map output.map
al vinculador. Al usar el enlazador GNU, también puede obtener el mismo efecto con `-Wl, -Map = output.map '.
hombre ld:
-rpath = dir
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 pasan al vinculador de tiempo de ejecución, que los usa 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;
Respuestas:
La
-Wl,xxx
opción para gcc pasa una lista de tokens separados por comas como una lista de argumentos separados por espacios al enlazador . Entoncesfinalmente se convierte en una llamada de enlazador
En su caso, desea decir "
ld -rpath .
", por lo que pasa esto a gcc como-Wl,-rpath,.
Alternativamente, puede especificar instancias repetidas de-Wl
:Tenga en cuenta que no hay coma entre
aaa
y el segundo-Wl
.O, en tu caso
-Wl,-rpath -Wl,.
,.fuente
-Wl,-rpath,.
o se dice-Wl,-rpath -Wl,.
. Precisamente uno de los dos, no puedes omitir nada.-Wl,-rpath -Wl,. -Wl,-rpath -Wl,/my/lib
?-Wl,-rpath,dir1,-rpath,dir2
, o-Wl,-rpath=dir1,-rpath=dir2
.También podrías escribir
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).
fuente
-Wl,option
: " Al usar el enlazador GNU , también puede obtener el mismo efecto con -Wl, -Map = output.map". Para mí, eso parece indicar que si usa un vinculador que no sea el vinculador GNU, es posible que la=
sintaxis no sea compatible.Otra cosa. Es posible que tenga que especificar la opción -L , así - por ejemplo,
o puede terminar con un error como
fuente
La página del manual lo deja bastante claro. Si desea pasar dos argumentos (
-rpath
y.
) al enlazador, puede escribiro alternativamente
Los argumentos
-Wl,-rpath .
que sugirió NO tienen sentido para mí. ¿Cómo se supone que gcc sabe que su segundo argumento (.
) se debe pasar al enlazador en lugar de ser interpretado normalmente? La única forma en que podría saberlo es si tuviera conocimiento interno de todos los posibles argumentos de enlace, de modo que supiera que se-rpath
requiere un argumento posterior.fuente