在Mac上构建Python库并遇到平面命名空间错误

时间:2010-09-24 21:54:05

标签: python macos namespaces boost-python flat

作为一般规则,每当我必须在Mac上构建Python库时,我都会感到很自豪。我通常使用Boost :: Python取得了相当不错的成功,如果我使用distutils,大多数当时一切正常。

然而,我从来没有弄清楚哪些有效/无效的确切组合。具体来说,我经常遇到一个无法找到符号的可怕问题,因为我试图使用的库没有平面命名空间。我已经尝试切换到MacPorts版本的Python,然后只使用MacPorts库,而且没有骰子。

我遇到的最新问题是我需要使用的依赖于OpenCV库的工具,而OpenCV库依赖于FFMPeg库(实际上,两者都是)。所有内容都会编译,但是当我“导入MYLIB”时,我会在平面命名空间中找不到符号_pix_fmt_info。我做一个DYLIB_LIBRARY_PRINT来查看加载的所有库,并且确实已经加载了libavformat,libavcodec,libavutil和libswscale。

所以,这是我的问题。具体问题,是否有人知道这里可能会发生什么。我需要手工构建libffmpeg吗?我做了一些非常愚蠢的事情,比如忘记了一个图书馆(我查了一下,我认为我不是..)

更一般地说,有一个很好的方法来处理平面命名空间问题吗?我是否总是担心包含哪些库?有没有人有一个很好的方法让事情正常工作?

有时我会想念Linux的世界..


修改


对不起,看起来这是我自己的愚蠢错误。我还没有弄清楚确切的问题,但看起来这个不合格的符号属于不同于我的库(即不是libffmpeg)。

然而,我仍然对其他人使用平面命名空间的经历感到好奇。

1 个答案:

答案 0 :(得分:0)

当我使用选项

编译“C”python绑定时,我已经看到了这个问题
-fvisibility=hidden parameter
在mac osx上

我的理解是,这类似于平面命名空间问题。