Linux 与VC和MinGW合作

Linux 与VC和MinGW合作,linux,visual-c++,png,cygwin,mingw,Linux,Visual C++,Png,Cygwin,Mingw,我试图在我的VC++项目中使用一些开源库,比如libpng。我在Linux环境中使用过它们,没有任何问题,但我不知道如何让它们在VC++环境中工作。以下是我尝试过的: 我从SF安装了用于Win32的libpng包(顺便说一句,我也以同样的方式安装了zlib)。我可以在程序文件\GnuWin32\include中看到png.h,但是当我包含它时,编译器说它需要unistd.h。我知道这是POSIX系统调用的标题,所以Windows不会有它 我安装了Cygwin,但后来意识到它只适用于使用gcc在w

我试图在我的VC++项目中使用一些开源库,比如libpng。我在Linux环境中使用过它们,没有任何问题,但我不知道如何让它们在VC++环境中工作。以下是我尝试过的:

  • 我从SF安装了用于Win32的libpng包(顺便说一句,我也以同样的方式安装了zlib)。我可以在程序文件\GnuWin32\include中看到png.h,但是当我包含它时,编译器说它需要unistd.h。我知道这是POSIX系统调用的标题,所以Windows不会有它

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

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

  • 到目前为止,这似乎是一个相当愚蠢的“包含”问题,但我就是想不出正确的方法。我真的是一个来自noob的跨平台的人。也许我从一开始就走错了路

    那么,我应该如何继续?在VC++中使用linux库的标准方式是什么


    顺便说一下,我可以用gcc使用MinGW或Cygwin生成windows可执行文件,但我更喜欢用VC++生成,因为我现有的代码库。谢谢你的帮助

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

    如果您的包有类似于GnuWin32的文件夹结构,那么它肯定不适用于msvc

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


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

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

    如果您的包有类似于GnuWin32的文件夹结构,那么它肯定不适用于msvc

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


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

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

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

    谢谢。但我没能做到。我可以用Cygwin构建,但是头部引用了linux特定的东西,比如unistd.h,所以不能在VC中使用。我遗漏了什么吗?我试过了,但正如我在原始帖子中解释的,它与sys/types.h上的windows标题冲突。基本上两者都定义sys/types.h,并且都不适用于其他环境。我不知道该怎么做才能把它编译好。谢谢。但我没能做到。我可以用Cygwin构建,但是头部引用了linux特定的东西,比如unistd.h,所以不能在VC中使用。我遗漏了什么吗?我试过了,但正如我在原始帖子中解释的,它与sys/types.h上的windows标题冲突。基本上两者都定义sys/types.h,并且都不适用于其他环境。我不知道该怎么做才能把它编译好。谢谢。我确信这是一个可行的解决方案,但为我使用的每个开源库寻找特定的Win32版本似乎相当乏味。为什么我不能从源代码构建自己?这不是开源的关键所在吗?我相信一定会有一个更通用的解决方案…你知道,典型的开源库使用自动配置生成构建工具不支持MS VC,所以你必须手动生成VC配置文件和头文件。这是一项很难完成的工作。嗯,的确,开源社区中很少有人关心VC。我过去认为大多数开源项目都是平台独立的,但事实上它们不是,对吗?平台独立是真的,但编译器独立是罕见的。不是吗?:)抱歉,我又被弄糊涂了-你是说像unistd.h这样的依赖性问题与编译器独立性有关吗?我以为是关于Linux和Win32的。如果只是关于编译器,那么我可以使用MinGW的gcc从源代码构建一个Win32库,然后在VC中将二进制文件用作静态库。但我的观点是,即使我有Win32库,我仍然不能使用头文件,因为它引用了非windows头文件,比如unistd.h…谢谢。我确信这是一个可行的解决方案,但为我使用的每个开源库寻找特定的Win32版本似乎相当乏味。为什么我不能从源代码构建自己?这不是开源的关键所在吗?我相信一定会有一个更通用的解决方案…你知道,典型的开源库使用自动配置生成构建工具不支持MS VC,所以你必须手动生成VC配置文件和头文件。这是一项很难完成的工作。嗯,的确,开源社区中很少有人关心VC。我过去认为大多数开源项目都是平台独立的,但事实上它们不是,对吗?平台独立是真的,但编译器独立是罕见的。不是吗?:)抱歉,我又被弄糊涂了-你是说像unistd.h这样的依赖性问题与编译器独立性有关吗?我以为是关于Linux和Win32的。如果只是关于编译器,那么我可以使用MinGW的gcc从源代码构建一个Win32库,然后在VC中将二进制文件用作静态库。但我的观点是,即使我有Win32库,我仍然不能使用头文件,因为它引用了非windows头文件,比如unistd.h。。。