我正在尝试/考虑制作CppCMS - C ++ Web Framework项目更多的跨平台。
今天我可以轻松支持Linux,OpenSolaris,FreeBSD甚至Cygwin。但是当谈到Native Windows时,它变得非常痛苦:
情况概述:
这是一个使用在Unix世界中流行的API的Web项目,例如:在大多数UNIX Web服务器中实现的CGI,FastCGI和SCGI;但我知道我无法在IIS中使用它,因为它不支持TCP / IP上的FastCGI(仅限Windows管道)。
因此,即使它可以工作,它也可能仅在Apache的Windows端口上运行。
我在POSIX API上大量接力:
底线:
有很多非重要的工作要做,即使它完成了,它可能只适用于MingW工具而不是Windows程序员使用的“ native ”工具 熟悉。
所以,我的问题是:
修改
对我来说,了解有多少Windows开发人员更喜欢使用它也很重要 开源开发工具,MingW,微软开发解决方案,如VS。
编辑#2:有关“原生”Windows解决方案和IIS的清除。
事实上,使用IIS运行框架确实很难。我解释一下:
该项目与标准 Web服务器API有关,因为FastCGI或SCGI允许通过sinlge套接字接受许多请求。因此,在应用程序方面,我接受新请求继续它并返回答案。有时几个线程处理多个请求。
因此,实现一个或两个标准协议我打开与任何现有服务器的通信:Apache,lighttpd,nginx,cherokee ......或任何其他服务器; IIS除外
IIS已经实现了FastCGI,但是...... supports only 1 connection per local process仅由Web服务器控制...
所以......绝对没有标准的方法将我的应用程序连接到IIS。
请注意,我实施标准 Web服务器API,我没有实现既不是IIS专有的ISAPI也不是Apache专有API,第二个更重要的是针对UNIX世界。
所以,只是Windows IIS Web世界还没有为这样的项目做好合作准备,所以如果有人在Windows下使用它,它会将它用于更开放的Web服务器。
答案 0 :(得分:3)
您应该根据用户需求做出决定。用户曾经要求在Windows上使用该框架吗?如果是这样,他们是否解释了为什么他们想要使用Windows(例如他们有什么额外的限制,他们想要使用什么网络服务器等)?
通常,Windows用户确实希望Windows工作方式。这意味着Visual Studio支持,IIS支持,MSI安装程序等。如果某些东西仍然像是Unix,我宁愿使用Unix,而不是使用半工作端口。
答案 1 :(得分:2)
作为一个Windows客户端应用程序开发人员,我觉得开发环境部门目前基本上是Win32和其他所有并且它们大多不兼容。这就是为什么我准备为我的个人Windows应用程序项目转移到MinGW并尝试使它们跨平台。
我建议逐步转向更多的跨平台库,如你所建议的那样,将pthread重构为boost :: thread,或者从fork()
转换为使用IPC的多进程,可能还使用boost的工具。日期/时间的东西也可以用Boost库来处理。至于数据库支持,有
我认为Microsoft编译器支持并不重要,因为MinGW提供了一个体面的构建环境,所有支持它的IDE,Eclipse CDT和Dev-C ++都是最受欢迎的。但是,如果您要使您的项目与msvc兼容,请确保用户能够使用Visual Studio 2010的Express版本(一旦出来) - 这样就没有人必须为Visual Studio 2010提供支持(升级)只是为了使用你的项目,你就没有问题需要最新的微软技术。
对于您项目规模的代码库,您很可能不会避免使用ifdef
一些内容,但如果不仅仅是为了获得宝贵的经验和扩展社区,那么这些努力肯定是值得的。很少有新的快乐和感恩的成员。
答案 2 :(得分:1)
你说你可以很容易地支持Cygwin,这让我想起我曾经看到过简单地捆绑在cygwin1.dll中的商业Windows软件,以支持一些最初的Unix代码。如果将cygwin1.dll添加到您的安装程序即可,请尝试一下。
答案 3 :(得分:1)
我认为你只需要查看SO上提出的问题就可以确定Windows上的MinGW用户(我是其中之一)在开发社区中占少数 - 绝大多数Windows开发人员都在使用MS工具。无论如何,编译器只占问题的一半(或更少) - 如果您的架构依赖于分支大量进程,使用MinGW不会对您有所帮助。我的建议是,如果你真的想做跨平台开发:
答案 4 :(得分:1)
我仍在使用我自己的大型POSIX项目解决这个问题,我的结论是,如果您需要稍后与Microsoft产品接口,那么它的价值,然而,如果项目中等小,我只会使用MingW如果它非常大,那么我会一直使用MSDN微软开发工具 - 那里将提供大量的帮助 - 但是它会花费
当然,使用MSDN中的工具在Microsoft IDE中工作肯定会缩短开发时间,但是它会增加您对Microsoft库的依赖 - 如果这是一个问题,您需要从头开始决定
** 实际上你可以在你的项目中添加必要的cygwin dll然后你就可以在windows中运行它了
当我添加以下dll
时,我设法让我的POSIX项目运行cygboost_filesystem.dll
cygboost_system-mt-1_53.dll
cygboost_thread.dll
cyggcc_s-1.dll
cygstdc++-6.dll
cygwin1.dll
可能你的项目会有不同的依赖关系,但是如果你认为转换不值得,那么也许这就是你的解决方案
您还可以将您的库添加为静态,然后最终只需要提供最后一个cygwin1.dll