Varför konvertera SO till DLL?
En .so lagrar maskinkod i ELF-format med Linux-systemanropskonventioner och glibc-länkning. En .dll lagrar maskinkod i Windows PE-format med Windows API-länkning. De är kompilerade för helt olika operativsystem - att byta ut containerformatet utan att kompilera om skulle skapa en fil som inget av operativsystemen kan ladda eftersom koden inuti fortfarande anropar fel system.
Hur man konverterar SO till DLL
MinGW-w64 OPEN-SOURCE
Korskompilera bibliotekets källkod för Windows med x86_64-w64-mingw32-gcc -shared -o lib.dll *.c för att producera en Windows .dll från en Linux-byggmaskin.
MSVC FREE
Kompilera bibliotekets källkod på Windows med Visual Studio eller cl.exe med länkflaggan /DLL för att producera en Windows .dll.
Om dessa format
En .so-fil är ett delat objektbibliotek på Linux och Unix - Linux-motsvarigheten till en Windows .dll. Program laddar den automatiskt vid körning; du öppnar den aldrig direkt. Om en app…
Öppna detaljer för .SO →En DLL (Dynamic Link Library) är en Windows-biblioteksfil som innehåller kompilerad kod som program läser in medan de körs, så det är inte något du öppnar genom att dubbelklicka. Om en app…
Öppna detaljer för .DLL →Kvalitet & vad man bör tänka på
- Både
.sooch.dllinnehåller nativ maskinkod kompilerad specifikt för deras respektive operativsystem - gränsen ligger på operativsystemnivå, inte bara i filformatet. - Om du inte har källkoden och biblioteket är proprietärt finns det ingen laglig eller praktisk väg till en
.dll. - Många open-source-bibliotek skickar redan med förbyggda Windows
.dll-filer - kontrollera projektets releasesida innan du försöker kompilera om.
Vanliga frågor
Varför kan inte en konverterare bara paketera om binärfilen?
.so anropar Linux-kärngränssnitt som inte finns i Windows - även om den paketeras i en PE-container kan Windows inte exekvera koden.Kan Wine köra en Linux `.so` på Windows?
.dll-filer kan köras på Linux - alltså motsatt riktning. Det hjälper inte med att köra Linux ELF-delade objekt på Windows.