从anaconda PyThreadState_Get在C / C ++中嵌入Python:没有当前线程

时间:2017-12-21 21:04:39

标签: python c++ anaconda linker-errors embedding

尝试将python解释器嵌入到c ++应用程序中。认为这将是直截了当的,但我认为与链接有关。唯一不寻常的是我正在尝试使用特定的Anaconda包。简单的c ++代码是:

# include <Python.h>

int main()
{
    printf("before initialize");
    Py_Initialize();
    printf("after initialize");
    PyRun_SimpleString("print('Hello from Python')");
    Py_Finalize();
    return 0;
}

编译我使用:

gcc pythonTest.cc  -I/path/to/anaconda/include/python3.6m -L/path/to/anaconda/lib/python3.6/config-3.6m-x86_64-linux-gnu -lm -lpthread -ldl -lutil -lpython3.6m -o pytest

它确实编译但是当我运行简单的程序时,我得到:

Fatal Python error: PyThreadState_Get: no current thread

before initializeAborted

我检查了程序看到的路径,它确实包含了我使用includes和lib指定的相同python可执行文件的路径。然而,一些搜索似乎表明,被调用的python版本在某种程度上与链接的不同。关于如何解决这个问题,我有点不知所措。

1 个答案:

答案 0 :(得分:-1)

尝试使用:

进行编译
gcc pythonTest.cc -I/$HOME/anaconda3/include/python3.6m -lpython3.6m