c ++ - Hvad menes med 'Windows understøtter ikke korrekt dynamisk link?'

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har læst dokumentationen til Linux-opkald dlopen() og dlsym(), der åbner et dynamisk bibliotek og indlæser et symbol i henholdsvis biblioteket.


Disse opkald ser ud til at svare til Windows 'LoadLibrary() og GetProcAddress().


Jeg læser 'Windows understøtter ikke korrekt dynamisk link' i dette indlæg: Kørsel LLVM passerer på Windows 10 giver ingen output i terminal?.


Hvad er grunden til, at Linux og Windows-dynamiske bibellesamtaler er forskellige?


Er den eneste forskel, at dynamiske biblioteker på Linux kan indlæse symboler i eksekverbare filer? Men dette ville betyde, at eksekverbare filer også er biblioteker på Linux, da dlopen() opererer på dynamiske biblioteker.

Bedste reference


Windows understøtter korrekt dynamisk linking . Forskellen er, at Windows ikke understøtter upassende dynamisk link, hvor du linker en eksekverbar mod et bibliotek (dvs. den forkerte vej). Denne fejl er umulig på Windows, fordi dens eksekverbare ikke har en eksporttabel.


Når det er sagt, er din logik lidt svag. Eksekverbare og dynamiske biblioteker er ikke meget forskellige, selv på Windows. LoadLibrary vil faktisk indlæse eksekverbare filer, det er s GetProcAdddress, som fejler.


Hvad angår plugin logikken, er det ganske let at arrangere i C ++ ved hjælp af abstrakte (rene virtuelle) klasser som grænseflader.