2009-09-09 834 views
9

是否有可能我的mingw 3.4.5安裝有問題?或者是在其他一些庫上提供的?mingw 3.4.5缺少dlfcn.h?

在你想知道的情況下

,dlfcn.h中就是這樣的東西的dlopen和dlclose定義,所以它應該是相當標準

+0

好笑的是,我是有這個問題最近也。 – GManNickG 2009-09-09 04:13:41

+0

MinGW在設計上不符合POSIX標準。它意味着是一個本地Windows工具鏈。將Cygwin用於win32的POSIX兼容工具。 – doug65536 2013-02-13 18:57:30

回答

6

這不是我的MinGW 3.4.5安裝,所以我懷疑你的安裝有問題。我猜想MinGW的維護人員希望你使用支持動態加載的Win32函數(LoadLibrary(),GetProcAddress()等)。

3

mingw是實現win32 API的windows(gcc端口)編譯器的實現。 dlfcn.h(dlopen/dlsym et。al。)中的函數是POSIX,而不是windows,因此不存在win32實現。 msys或cygwin中可能有一個包裝,但我擔心windows DLL和ELF共享庫機制之間的差異意味着您只需要移植到Windows API。

0

我知道這是一個古老的問題,但今天仍然相關,無論MinGW.org中可能正在使用的GCC版本如何。那些觀察到MinGW真的是用於基於LoadLibrary()和GetProcAddress()的原生Win32 API而不是在dlfcn.h中聲明的POSIX特定API的人是完全正確的;因此,MinGW.org傳統上沒有提供任何dlfcn.h API函數的實現。

但是,從mingwrt-3.21開始,我需要實現類似於RTLD_DEFAULT地址空間上的dlsym()的POSIX使用的MinGW功能。因此,從此版本的MinGW運行時開始,我打算維護POSIX dlfcn.h API的一致性實現,作爲LoadLibrary(),GetProcAddress()和PSAPI.DLL本機Win32 API的封裝。

+0

請注意,dlfcn的MinGW實現**不是來源於dlfcn-win32,(在另一個答案中提及,現在可以在GitHub上找到)。這是一個新的實現,從頭開始編寫,提供更全面的POSIX功能合規性(MinGW需要);它也是在更寬鬆的MIT許可下分發的,而不是GPL-2。 – 2015-03-10 03:29:55

0

dlfcn.h中:沒有這樣的文件或目錄

爲了解決這個問題,我不得不添加到.pro文件:

DEFINES += _WINDOWS