Hvorfor konvertere SO til DLL?
En .so gemmer maskinkode i ELF-format med Linux-systemkaldskonventioner og glibc-linkage. En .dll gemmer maskinkode i Windows PE-format med Windows API-linkage. De er kompileret til helt forskellige operativsystemer - at bytte om på containerformatet uden at rekompilere ville producere en fil, som intet OS kunne indlæse, fordi koden indeni stadig kalder det forkerte system.
Sådan konverterer du SO til DLL
MinGW-w64 OPEN-SOURCE
Krydskompiler bibliotekets kildekode til Windows ved hjælp af x86_64-w64-mingw32-gcc -shared -o lib.dll *.c for at producere en Windows .dll fra en Linux-build-maskine.
MSVC FREE
Kompiler bibliotekets kildekode på Windows ved hjælp af Visual Studio eller cl.exe med /DLL linker-flaget for at producere en Windows .dll.
Om disse formater
En .so-fil er et delt objektbibliotek på Linux og Unix - Linux-modstykket til en Windows .dll. Programmer indlæser den automatisk ved kørsel; du åbner den aldrig direkte. Hvis en app fejler…
Åbn .SO detaljer →En DLL (Dynamic Link Library) er en Windows-biblioteksfil, der indeholder kompileret kode, som programmer indlæser, mens de kører, så det er ikke noget, du åbner ved at dobbeltklikke. Hvis…
Åbn .DLL detaljer →Kvalitet & hvad man skal være opmærksom på
- Både
.soog.dllindeholder indfødt maskinkode kompileret specifikt til deres respektive OS - grænsen ligger på operativsystemniveau, ikke kun i filformatet. - Hvis du ikke har kildekoden, og biblioteket er proprietært, findes der ingen lovlig eller praktisk vej til en
.dll. - Mange open source-biblioteker leveres allerede med prækompilerede Windows
.dll-filer - tjek projektets udgivelsesside, før du forsøger at rekompilere.
Ofte stillede spørgsmål
Hvorfor kan en konverter ikke bare omemballere den binære fil?
.so kalder Linux-kerne-grænseflader, der ikke findes på Windows - selv pakket ind i en PE-container kan Windows ikke eksekvere koden.Kan Wine køre en Linux `.so` på Windows?
.dll-filer kan køre på Linux - den modsatte retning. Det hjælper ikke med at køre Linux ELF shared objects på Windows.