我想创建一个与libpython2.so
和libpython3.so
链接的库,以便能够执行Python2和Python 3脚本。问题是两个库都包含具有相同名称的函数。我尝试通过以下方式解决问题:
foo-python2.c
用于Python 2支持,它与libpython2.so
foo-python3.c
,支持Python 3,与libpython3.so
foo-main.c
,它调用Python 2和Python 3支持模块中的init函数,并与foo-python2.o
和foo-python3.o
链接。当加载libfoo.so时,Python 2初始化正在按预期工作,但是当我尝试访问Python 3函数时,它无法按预期工作。
在我调用Py_IsInitialized()
时,在Python 3支持库中返回true,尽管libpython3.so
未加载g_module_open
。所以我的假设是Py_IsInitialized
指向Python 2版本。当我忽略此并调用g_module_open("/usr/lib/libpython3.so", 0)
并调用某些Py_*
函数时,模块会崩溃。
如何正确链接3个对象以解决我的问题?