Golang, carregue DLL do Windows no Linux

Daniyar Baitursynov:

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?

Assim: https://github.com/golang/go/wiki/WindowsDLLs

custo:

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.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados