2009-09-09 3 views
9

è possibile che la mia installazione di mingw 3.4.5 sia difettosa? o questo è fornito su qualche altra libreria in giro?mingw 3.4.5 mancante dlfcn.h?

nel caso in cui vi state chiedendo, dlfcn.h è dove cose del genere dlopen e dlclose sono definiti, quindi dovrebbe essere abbastanza standard

+0

divertente, ho avuto questo problema di recente anche. – GManNickG

+0

MinGW non è conforme POSIX, in base alla progettazione. È pensato per essere una toolchain nativa di Windows. Utilizzare Cygwin per gli strumenti conformi a POSIX per win32. – doug65536

risposta

6

Non è nella mia installazione MinGW 3.4.5, quindi dubito l'installazione è difettoso . Suppongo che i manutentori di MinGW si aspettino che tu usi le funzioni Win32 che supportano il caricamento dinamico (LoadLibrary(), GetProcAddress(), ecc.).

3

mingw è un'implementazione di un compilatore per Windows (una porta gcc) che implementa l'API win32. Le funzioni in dlfcn.h (dlopen/dlsym et. Al.) Sono POSIX, non windows, quindi non esiste un'implementazione win32. Potrebbe esserci un wrapper in msys o cygwin, ma temo che le differenze tra la DLL di Windows ei meccanismi di libreria condivisa ELF significano che dovrai semplicemente effettuare il porting alle API di Windows.

0

So che questa è una vecchia domanda, ma comunque ancora attuale, indipendentemente dalla versione di GCC di MinGW.org che potrebbe essere in uso.

Chi ha osservato che MinGW è realmente destinato all'uso con le API Win32 native, basate su LoadLibrary() e GetProcAddress(), anziché le API specifiche POSIX dichiarate in dlfcn.h, sono completamente corrette; quindi, MinGW.org non ha tradizionalmente fornito alcuna implementazione delle funzioni API dlfcn.h.

Tuttavia, a partire da mingwrt-3.21, avevo bisogno di implementare funzionalità MinGW che è simile all'utilizzo POSIX di dlsym() nello spazio di indirizzi RTLD_DEFAULT. Di conseguenza, da questa versione del runtime MinGW in poi, intendo mantenere un'implementazione conforme delle API dllfcn.h POSIX, come un wrapper attorno alle API Win32 native di LoadLibrary(), GetProcAddress() e PSAPI.DLL.

+0

Si noti che l'implementazione MinGW di dlfcn è ** non ** derivata da dlfcn-win32, (menzionata in un'altra risposta, e ora si trova su GitHub). Si tratta di una nuova implementazione, scritta da zero, per offrire una conformità alle funzionalità POSIX più completa (di cui MinGW aveva bisogno); è anche distribuito sotto la licenza MIT più permissiva, piuttosto che GPL-2. –

0

dlfcn.h: No such file or directory

Per risolvere questo ho dovuto aggiungere al file .pro:

DEFINES += _WINDOWS