Сборка Pybind11 - тестовый пример не запускается? - PullRequest
0 голосов
/ 01 августа 2020

Я сейчас пытаюсь установить Pybind на свой Ma c. Я следую этим инструкциям: https://pybind11.readthedocs.io/en/stable/basics.html.

Я клонировал репозиторий pybind на свой компьютер, создал каталог сборки в этом репо и выполнил тестовые примеры (выполните проверку - j 4).

Вот мой макет каталога:

Home/
    ---example.cpp
    ---pybind11/

У меня есть пример. cpp Файл, который я написал:

#include <pybind11/pybind11.h>

namespace py = pybind11;

int add (int i, int j) {
        return i + j;
}

PYBIND11_MODULE(example, m) {
        m.doc() = "pybind11 example plugin";

        m.def("add", &add, "A function which adds two numbers");
}
example.cpp

I скомпилируйте его с помощью следующей команды и флагов (источник: https://pybind11.readthedocs.io/en/stable/compiling.html#building - вручную ):

c++ -O3 -Wall -shared -std=c++11 -undefined dynamic_lookup `python3 -m pybind11 --includes` example.cpp -o example`python3-config --extension-suffix`

Я получаю следующую ошибку:

example.cpp:1:10: fatal error: 'pybind11/pybind11.h' file not found
#include <pybind11/pybind11.h>
         ^~~~~~~~~~~~~~~~~~~~~
1 error generated.

Когда я переместите мой файл в репозиторий pybind11, я могу успешно скомпилировать, но выполнение дает мне следующую ошибку:

zsh: exec format error: ./example.cpython-37m-darwin.so

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

Продолжение: я думаю, что Сет приблизил меня к тому, чтобы заставить его работать (большое спасибо), но у меня все еще есть эта проблема:

    c++ -O3 -Wall -shared -std=c++11 -undefined dynamic_lookup `python3 -m pybind11 --includes` example.cpp -o example`python3-config --extension-suffix` -I pybind11/include/ 
/Applications/Xcode.app/Contents/Developer/usr/bin/python3: No module named pybind11.__main__; 'pybind11' is a package and cannot be directly executed
In file included from example.cpp:1:
In file included from pybind11/include/pybind11/pybind11.h:44:
In file included from pybind11/include/pybind11/attr.h:13:
In file included from pybind11/include/pybind11/cast.h:13:
In file included from pybind11/include/pybind11/pytypes.h:12:
pybind11/include/pybind11/detail/common.h:122:10: fatal error: 'Python.h' file not found
#include <Python.h>
     ^~~~~~~~~~
1 error generated.

Пытался последовать совету этого парня на github, но я получил та же ошибка: https://github.com/pybind/pybind11/issues/1728#issuecomment -616619910

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Проблема решена: c ++ -O3 -Wall -shared -std = c ++ 11 -undefined dynamic_lookup PYTHONPATH=./pybind11 python -m pybind11 --includes пример. cpp -o example` python3 -config --extension-suffix

Также можно использовать make-файл.

0 голосов
/ 01 августа 2020

Файл не находится на вашем пути включения. Вы можете установить его на свои машины по умолчанию include path или добавить -I path_to_directory_contain_pybind11 к вашей команде компиляции.

...