Вызывая Python из C ++, как связать определенную среду Anaconda? - PullRequest
1 голос
/ 03 марта 2020

Я пытаюсь встроить Python в C ++, следуя этому руководству здесь:

https://docs.python.org/3.7/extending/embedding.html

Это очень хорошо работает для старой общесистемной системы Python 2.7 установка. Сейчас я пытаюсь сделать то же самое, используя определенную среду Anaconda, в которой я установил библиотеку, которую я хочу использовать.

Мой пример Hello World для этого

#include <iostream>
#include <Python.h>
int main(int argc, char* argv[]){
    wchar_t *program = Py_DecodeLocale(argv[0], NULL);
    Py_SetProgramName(program);
    Py_Initialize();

    std::cout << "trying to import dolfin" << std::endl;
    PyRun_SimpleString("import dolfin");
    std::cout << "success?" << std::endl;

    Py_Finalize();
    return 0; 
}

Попытка скомпилировать это с помощью

g++ -I/home/peter/anaconda3/envs/fenicsproject/include/python3.7m/ python_from_cpp.cpp -L/home/peter/anaconda3/envs/fenicsproject/lib/python3.7/config-3.7m-x86_64-linux-gnu/ -lpython3.7m

(Примечание 1: включаемая часть работает, другие флаги рекомендуют связывать флаги, см. Ссылку 1.6 выше) (Примечание 2: в конце я хочу скомпилировать через mpic ++, но пытаюсь получить это идти первым.)

Это дает вывод:

lto1: internal compiler error: in lto_tag_to_tree_code, at lto-streamer.h:1005
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-7/README.Bugs> for instructions.
lto-wrapper: fatal error: g++ returned 1 exit status
compilation terminated.
/usr/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status

Любая помощь / понимание приветствуются.

...