【问题标题】:Working with VC and MinGW使用 VC 和 MinGW
【发布时间】:2010-12-31 00:19:10
【问题描述】:

我正在尝试在我的 VC++ 项目中使用一些开源库,例如 libpng。我在 Linux 环境中使用它们没有问题,但我对如何让它们在 VC++ 环境中工作一无所知。这是我尝试过的:

  1. 我从 SF 安装了 libpng for Win32 包(顺便说一句,我也安装了 zlib)。我可以在 Program Files\GnuWin32\include 中看到 png.h,但是当我包含它时,编译器说它需要 unistd.h。我知道这是 POSIX 系统调用的标头,所以 Windows 不会有它。

  2. 我安装了 Cygwin,但后来意识到它只适用于使用 gcc 在 Windows 上构建 linux 源代码,而不是使用 MS VC(或者我错了吗?)

  3. 我安装了 MinGW,但似乎 MinGW 也是为使用 gcc 而设计的(或者我错了吗?)。 MinGW 确实带有 unistd.h,但是这个头文件引用了来自 linux 的 MinGW 的 sys/types.h,而 MSVC 有自己不同的 sys/types.h,所以编译器不知道使用哪个。这两个文件定义了不同的东西,都不能同时涵盖两者,因此包括任何一个都不足以编译整个项目。

到目前为止,这似乎是一个非常愚蠢的#include 问题,但我就是想不出正确的方法。我真的是一个跨平台的菜鸟。也许我从一开始就走错了路……

那我应该怎么做呢?您在 VC++ 中使用 linux 库的标准方式是什么?

顺便说一句,我可以使用 MinGW 或 Cygwin 使用 gcc 构建 Windows 可执行文件,但由于我现有的代码库,我更喜欢能够使用 VC++ 构建。感谢您的帮助!

【问题讨论】:

    标签: linux visual-c++ png cygwin mingw


    【解决方案1】:

    显然,您必须下载 libpng.lib/dll 和 MS VC 的头文件。

    如果你的包有类似 GnuWin32 的文件夹结构,那肯定不适合 MS VC。

    查看 OpenCV 分发版 (http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.2/)

    它包含了libpng和其他图像格式库的VC构建。

    【讨论】:

    • 谢谢。我确信这是一个可行的解决方案,但是为我使用的每个开源库寻找特定的 Win32 构建似乎相当乏味。为什么我不能从源代码构建自己?这不正是开源的意义所在吗?我确信必须有一个更通用的解决方案......
    • 要知道,典型的开源库使用自动生成配置的构建工具不支持MS VC,所以必须手动生成VC的配置和头文件。这很难做到。
    • 嗯,开源社区中确实很少有人关心 VC。我以前认为大多数开源项目都是独立于平台的,但实际上它们不是,对吧?
    • 独立于平台,但独立于编译器的情况很少见。不是吗? :)
    • 对不起,我再次感到困惑 - 你的意思是像 unistd.h 这样的依赖问题与编译器独立性有关吗?我认为这是关于 Linux 与 Win32 的。如果它只是关于编译器,那么我可以使用 MinGW 的 gcc 从源代码中构建一个 Win32 库,然后在 VC 中将二进制文件用作静态库。但我的观点是,即使我有 Win32 库,我仍然无法使用标头,因为它引用了 unistd.h 之类的非 Windows 标头 ...
    【解决方案2】:

    常见的解决方案是通过 gcc(Cygwin 或 MinGW,无所谓)构建此类库,从 VC 项目接收库并与它们链接

    【讨论】:

    • 谢谢。但我无法做到这一点。我可以用 Cygwin 构建,但头文件引用了 linux 特定的东西,比如 unistd.h,所以它不能在 VC 中使用。我错过了什么吗?
    • 我试过了,但正如我在原帖中解释的那样,它与 sys/types.h 上的 windows 标题冲突。基本上两者都定义了 sys/types.h 并且都不适用于其他环境。我不知道我应该怎么做才能编译它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多