为什么python扩展共享库?是否可以创建一个静态链接库?

时间:2010-05-19 13:01:36

标签: python c

我是扩展菜鸟。我想要做的是创建一个不需要安装其他库的扩展。这是不可能的,因为扩展必须在运行时链接到特定版本的libpython吗?

2 个答案:

答案 0 :(得分:5)

你不能创建一个静态链接的扩展模块,因为Python需要在运行时动态加载它,因为(正如你的推理)模块需要动态链接libpython。

您可以使用静态链接到解释器的扩展编译自己的Python自定义版本。这通常比它的价值更麻烦。

为什么要创建静态链接的扩展?如果我们有关于您的目标的更多信息,我们可能会帮助您以不同的方式实现这些目标。

欢迎使用StackOverflow。 : - )

答案 1 :(得分:3)

我认为你在混合东西。您不希望扩展在解释器中静态链接(这可能很麻烦,因为它涉及重建自定义解释器),您希望扩展不与pythonxx.dll链接,或者静态链接到它。这是不可能的;你的扩展和python解释器将拥有各自的全局变量副本,例如Bad。

还有另一种方法,即通过LoadLibrary(Windows)或dlopen(Linux / etc)加载Python DLL,然后在运行时决定,确定运行时可用的Python版本以及动态使用Python / C API。方法签名取决于版本等。非常繁琐。有关Delphi中此类操作的示例,请参阅PythonForDelphi:

http://www.atug.com/andypatterns/pythonDelphiTalk.htm

我不知道有任何其他项目会这样做。

相关问题