我已经为c ++代码编写了一个python接口。我有两台不同的计算机运行ubuntu 11.04并使用相同的软件包(python 2.7.1,numpy 1.5.1,gcc 4.5.2)。我们称他们为A和B.
代码在两台计算机上编译和链接没有错误。但是,在A上,代码似乎在c ++代码的中间某处进入无限循环(CPU正在运行,但程序永远不会结束)。如果我将这个相同的共享库复制到计算机B,它可以正常工作。
我可以通过对代码,不同参数等进行小的更改来重现这一点。我使用过valgrind,但是没有内存泄漏/访问内存以前没有分配过等等。代码不依赖于任何东西而是安装了库通过包管理系统,所以这些是相同的。
有没有人有任何合理的解释可能来自哪里? 除了以下(我已经检查过):
答案 0 :(得分:0)
在您的计算机上使用哪个编译器构建python?这是Python扩展的关键点。如果你使用不同的编译器,可能会发生任何不好的事情。
答案 1 :(得分:0)
即使您不是多线程(如定义多个线程),也可能存在SMP问题:如果内存位置是易失性的,则上下文切换和CPU调度可能会导致程序“不”看到实际更改。
即使你没有(明确地)做任何线程,如果Python的垃圾收集在一个单独的线程上运行,我也不会感到惊讶。
答案 2 :(得分:0)
不同的计算机可能具有不同的处理器/架构。理想情况下,您也可以在另一台计算机上编译Python。这样做,你就会知道问题是复制库,或者代码是什么,或者它是否是环境配置的东西。