2

我有一个用 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")
4

1 回答 1

2

如果你有一个initfoo导出符号的共享库(注意:因为你已经标记了问题 - 确保它是一个extern "C"符号,否则名称修改会阻止解释器找到它),那么它已经是一个 Python 模块,并且可以加载直接,没有进一步的工作。您只需要确保它在搜索路径上,就像任何其他模块一样。

于 2011-06-23T16:29:36.930 回答