Nosso fornecedor fornece DLL, que funciona no Windows. É possível carregar um arquivo xxx.dll personalizado e usar suas funções no Linux usando Go?
A resposta curta é "não": quando você "carrega" uma biblioteca vinculada dinâmica, ela não é apenas carregada (como na leitura do arquivo), mas vinculada ao espaço de endereço do programa em execução - pelos meios especiais fornecidos pelo SO (em sistemas baseados em Linux, pelo menos em plataformas x86 / amd64 que é um processo externo; no Windows, é uma instalação do kernel, AFAIK). Em outras palavras, carregar uma biblioteca com link dinâmico envolve muita complexidade acontecendo nas suas costas.
Outra complicação é se a DLL é "autocontida" no sentido de que contém apenas funções "puras" - que apenas realizam cálculos em seus dados de entrada para fornecer seus dados de saída - ou chamam o sistema operacional para realizar atividades como E / S em arquivos. A maneira como os sistemas operacionais fornecem maneiras de realizar esses tipos de atividades nos processos em execução são drasticamente diferentes entre o Windows e o Linux.
A última complicação em que posso pensar é a dependência desta biblioteca de outras. Se o código da biblioteca for escrito em C ou C ++, provavelmente depende da biblioteca C usada pelo compilador que compilou a biblioteca (no Windows, normalmente é isso MSVCRxx.DLL
). (Um exemplo simples é chamar malloc()
ou printf()
ou algo assim no código de uma biblioteca.)
Tudo isso significa que a maior parte de uma DLL escrita no Windows para Windows depende tanto do Windows quanto da biblioteca padrão C ou C ++ associada ao compilador usado para construir essa biblioteca.
Isso sem mencionar que o Windows DLL usa o formato PE (Portable Executable) para seus módulos, enquanto os sistemas baseados em GNU / Linux usam nativamente o formato ELF para seus arquivos de objetos compartilhados.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras