编译好的python库可以在一台计算机上运行但不能在另一台计

时间:2011-08-22 13:13:30

标签: c++ python ubuntu

我已经为c ++代码编写了一个python接口。我有两台不同的计算机运行ubuntu 11.04并使用相同的软件包(python 2.7.1,numpy 1.5.1,gcc 4.5.2)。我们称他们为A和B.

代码在两台计算机上编译和链接没有错误。但是,在A上,代码似乎在c ++代码的中间某处进入无限循环(CPU正在运行,但程序永远不会结束)。如果我将这个相同的共享库复制到计算机B,它可以正常工作。

我可以通过对代码,不同参数等进行小的更改来重现这一点。我使用过valgrind,但是没有内存泄漏/访问内存以前没有分配过等等。代码不依赖于任何东西而是安装了库通过包管理系统,所以这些是相同的。

有没有人有任何合理的解释可能来自哪里? 除了以下(我已经检查过):

  • A和B运行所有相同的库/包
  • 除了boost :: function和STL
  • 之外,底层c ++库没有外部依赖关系
  • 使用相同的构建系统/编译器从头开始编译所有内容
  • 环境变量是相同的

3 个答案:

答案 0 :(得分:0)

在您的计算机上使用哪个编译器构建python?这是Python扩展的关键点。如果你使用不同的编译器,可能会发生任何不好的事情。

答案 1 :(得分:0)

即使您不是多线程(如定义多个线程),也可能存在SMP问题:如果内存位置是易失性的,则上下文切换和CPU调度可能会导致程序“不”看到实际更改。

  • 您是否尝试在没有任何优化的情况下进行编译(在gcc上为-O0)。
  • 是否有任何变量可能是易失性的,应该标记为这样(考虑设备输入,零复制缓冲区,mmaps)。

即使你没有(明确地)做任何线程,如果Python的垃圾收集在一个单独的线程上运行,我也不会感到惊讶。

答案 2 :(得分:0)

不同的计算机可能具有不同的处理器/架构。理想情况下,您也可以在另一台计算机上编译Python。这样做,你就会知道问题是复制库,或者代码是什么,或者它是否是环境配置的东西。