草庐IT

c++ - 在 Windows 上编译+分发 Linux 代码

coder 2024-06-15 原文

我有一个更大的代码在 Linux 中运行,用 c++ (c++11) 和 python 编写并使用大量库(VTK、boost、pyqt、OpenGL)并编译为 python 扩展模块(和这些模块的插件)和纯 python 模块(主程序是 python 脚本)。代码是跨平台的(除了少数异常(exception),例如 dlopengettimeofday 可以通过 #ifdef 替换为 Windows 等价物)和编译器不可知(它编译为 -ansi,以及一些特定于编译器的东西,如 __attribute__,如果需要的话,希望也可以被替换)。

我正在尝试在 Windows 上进行编译,但我完全不知道应该如何进行(我在 Linux 开发方面相当有经验,但自 90 年代后期以来我就没有使用过 Windows)。

我应该使用 mingw 还是 MSVC 编译器?我最好交叉编译吗?我是否需要通过从网络下载安装程序来“手动”安装依赖项?我还需要编译那些吗?是否有包含文件的标准路径,或者是否要检测所有文件?如果我设法编译它,如何制作某种包(它是纯 Python 模块和共享库的 bundle )?

我想我不是第一个试图了解它在 Windows 下如何工作的人(我想我被包管理器和 Linux 中所有对开发人员友好的东西宠坏了),也许某处有有用的引用。

最佳答案

我认为您在这里的选择取决于您在 Windows 下编译的目标。您是否准备让其他可以选择其开发平台的开发人员参与进来?你想使用不同的编译器来生成额外的警告吗?您要在 Windows 平台上部署应用程序吗?提出这些问题应该有助于您做出更明智的决定。

这里有一些建议...

  • 尝试 MSVC 也没什么坏处。 2010 速成版是最后一个支持标准 C++ 开发的免费版本。 future 的 Express 版本仅适用于“Metro”应用程序。我会权衡一下您的 Windows 开发目标,然后做出相应的选择。
  • 对于跨平台构建,看看您是否可以实现标准化构建系统,例如 CMake 或 SCons。
  • 无论最终决定如何,我都不会附带依赖项。开源要求开发人员单独下载依赖项是标准做法。只要确保包含当前稳定版本与您的应用程序不向后兼容的任何内容的版本信息。 (或者更好的是,解决这些问题,这样您就可以从 3rd 方代码中获得最新修复的好处。)Python 至少应该是开发人员的责任。它旨在被安装,并且 pywin32 扩展将在 Windows 安装的系统注册表中注册 COM 项。
  • 就招聘开源开发人员而言,您可能会发现要求在开发人员的机器上安装 MinGW 会阻碍一些专门的 MSVC 用户从事该项目。

关于c++ - 在 Windows 上编译+分发 Linux 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11314253/

有关c++ - 在 Windows 上编译+分发 Linux 代码的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

  4. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  5. ruby-on-rails - 浏览 Ruby 源代码 - 2

    我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru

  6. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  7. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  8. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  9. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  10. 程序员如何提高代码能力? - 2

    前言作为一名程序员,自己的本质工作就是做程序开发,那么程序开发的时候最直接的体现就是代码,检验一个程序员技术水平的一个核心环节就是开发时候的代码能力。众所周知,程序开发的水平提升是一个循序渐进的过程,每一位程序员都是从“菜鸟”变成“大神”的,所以程序员在程序开发过程中的代码能力也是根据平时开发中的业务实践来积累和提升的。提高代码能力核心要素程序员要想提高自身代码能力,尤其是新晋程序员的代码能力有很大的提升空间的时候,需要针对性的去提高自己的代码能力。提高代码能力其实有几个比较关键的点,只要把握住这些方面,就能很好的、快速的提高自己的一部分代码能力。1、多去阅读开源项目,如有机会可以亲自参与开源

随机推荐