Por que converter SO para DLL?
Um .so armazena código de máquina no formato ELF com convenções de chamada de sistema Linux e vinculação glibc. Um .dll armazena código de máquina no formato Windows PE com vinculação à API do Windows. Eles são compilados para sistemas operacionais inteiramente diferentes - trocar o formato do contêiner sem recompilar produziria um arquivo que nenhum SO poderia carregar, pois o código interno ainda chamaria o sistema errado.
Como converter SO para DLL
MinGW-w64 OPEN-SOURCE
Compile de forma cruzada o código-fonte da biblioteca para Windows usando x86_64-w64-mingw32-gcc -shared -o lib.dll *.c para produzir um .dll de Windows a partir de uma máquina de build Linux.
MSVC FREE
Compile o código-fonte da biblioteca no Windows usando Visual Studio ou cl.exe com a flag de vinculação /DLL para produzir um .dll de Windows.
Sobre estes formatos
Um arquivo .so é uma biblioteca de objetos compartilhados no Linux e Unix - o equivalente no Linux a um .dll do Windows. Os programas o carregam automaticamente durante a execução; você…
Abrir detalhes de .SO →Uma DLL (Dynamic Link Library) é um arquivo de biblioteca do Windows que contém código compilado que os programas carregam enquanto são executados, portanto, não é algo que se abre com um…
Abrir detalhes de .DLL →Qualidade e o que observar
- Tanto o
.soquanto o.dllcontêm código de máquina nativo compilado especificamente para seus respectivos SO - a fronteira está no nível do sistema operacional, não apenas no formato do arquivo. - Se você não possui o código-fonte e a biblioteca é proprietária, não existe uma rota legal ou prática para um
.dll. - Muitas bibliotecas de código aberto já enviam arquivos
.dllde Windows pré-compilados - verifique a página de lançamentos do projeto antes de tentar recompilar.
Perguntas frequentes
Por que um conversor não pode simplesmente reempacotar o binário?
.so chama interfaces do kernel Linux que não existem no Windows - mesmo envolvido em um contêiner PE, o Windows não pode executar o código.O Wine pode rodar um `.so` de Linux no Windows?
.dll rodem no Linux - a direção oposta. Ele não ajuda a executar objetos compartilhados ELF do Linux no Windows.