Vinculando com as opções -R e -rpath no Windows
Estou usando o compilador gcc (MinGW) no Windows XP. Criei uma biblioteca .dlllibdir.dll
do que tentei criar um programa que está usando essa biblioteca.
Eu não quero colocar esse arquivo .dll na pasta System ou System32 nem definir o caminho para ele na variável PATH, o que eu quero é fornecer essas informações para o próprio programa.
Eu sei que existe um-R
e-rpath
interruptores disponíveis, então eu ia ligá-lo com um deles.
Primeiro caminho:
gcc -L/ caminho / para / lib-Wl, -rpath,/ caminho / para / libmain.o -ldir -o prog
Than -R:
gcc -L/ caminho / para / lib-Wl, -R,/ caminho / para / libmain.o -ldir -o prog
Isso se liga com êxitoprog
mas quando inicio o programa, o Windows imprime uma mensagem que não consegue encontrarlibdir.dll
.
Então, minha pergunta é o que deu errado, por que caminho paralibdir.dll
não é conhecido em tempo de execução, mesmo quando estou usando opções apropriadas?
Digamos que eu tenho prog1 e prog2, cada um contendo sua própria cópia do libdir.dll e os dois começam a ser executados ao mesmo tempo em que carregam o código na biblioteca. O que acontece na memória, há duas cópias carregadas ou vinculador descobre que há uma cópia e usa isso para ambos os programas?
A segunda pergunta é sobre como as bibliotecas são carregadas (qualquer sistema operacional) .Os vinculadores sempre carregam a biblioteca inteira ou apenas as partes necessárias? Por exemplo, se o programa referenciar a funçãofoo()
que está na biblioteca, o vinculador mapeia na memória somente essa função ou a biblioteca inteira primeiro?