Vinculación con los modificadores -R y -rpath en Windows
Estoy usando el compilador gcc (MinGW) en Windows XP. Creé una biblioteca .dlllibdir.dll
entonces intenté construir un programa que esté usando esa biblioteca.
No quiero poner ese archivo .dll en la carpeta System o System32 ni establecer la ruta en la variable PATH, lo que quiero es dar esa información al programa en sí.
Sé que hay un-R
y-rpath
interruptores disponibles, así que iba a vincularlo con uno de ellos.
Primera ruta:
gcc -L/ ruta / a / lib-Wl, -rpath,/ ruta / a / libmain.o -ldir -o prog
Que -R:
gcc -L/ ruta / a / lib-Wl, -R,/ ruta / a / libmain.o -ldir -o prog
Esto enlaza con éxito aprog
pero cuando inicio el programa, Windows imprime un mensaje que no puede encontrarlibdir.dll
.
Entonces mi pregunta es qué salió mal, por qué camino alibdir.dll
no se conoce en tiempo de ejecución incluso cuando estoy usando los interruptores adecuados?
Digamos que tengo prog1 y prog2, cada uno de los cuales contiene su propia copia de libdir.dll y ambos comienzan a ejecutarse al mismo tiempo cargando el código en la biblioteca. Lo que sucede en la memoria es que hay dos copias cargadas o el enlazador descubre que hay una copia y usa eso para ambos programas?
La segunda pregunta es sobre cómo se cargan las bibliotecas (cualquier sistema operativo). ¿Los enlazadores siempre cargan toda la biblioteca o solo partes necesarias? Por ejemplo, si las referencias de programa funcionanfoo()
que está en la biblioteca, ¿el enlazador asigna en la memoria solo esa función o toda la biblioteca primero?