2009-09-09 833 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