【发布时间】:2011-06-23 16:25:20
【问题描述】:
我有一个用 C++ 创建的包,并且已经将它编译到一个共享库中。
当我用自己的 main 函数链接它时,我可以通过直接调用初始化函数 initfoo 来初始化包,一切正常。
如何让 python 将我的共享库识别为一个包,所以我可以输入:
import foo
从常规 python 解释器运行?
我对使用 distutils 编译文件不感兴趣,因为编译必须是常规 cmake 构建系统的一部分。我只需要创建加载共享库所需的任何包文件。
更新: 我现在让它工作了。问题在于 cmake 默认为共享库名称的 lib 前缀。要解决这个问题需要
SET_TARGET_PROPERTIES(foo PROPERTIES PREFIX "")
对于 Mac OS X
SET_TARGET_PROPERTIES(foo PROPERTIES SUFFIX ".so")
【问题讨论】:
-
distutils的存在特别是因为它自己可能会很麻烦(请参阅python-history.blogspot.com/2009/03/…) - 使用distutils构建它(可能两次,如果在cmake构建中也需要它)完全没有问题? -
这是不可能的。我的命令调用了很多 C++ 函数。此外,在 Mac OS X 上,生成的共享库必须链接到我的所有其他共享库。
标签: c++ python cmake distutils python-c-api