Как правильно скомпилировать код C ++ с pybind11 - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть следующий базовый код cpp с pybind11:

#include "pch.h"
#include <pybind11/pybind11.h>

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

PYBIND11_MODULE(example, m) {
    m.doc() = "pybind11 example plugin"; // optional module docstring

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

Вот шаги, которые я выполнил (я использую Visual Studio 17 без модулей Python, у меня есть Python отдельно в enacs anaconda):

  • Я вручную добавил заголовок pybind11 в дополнительные каталоги include проекта.
  • Я установил цель как x64, а Release
  • Я просто скомпилировал файл, который создал объект "example.obj "в каталоге выпуска
  • Я добавил объектный файл в каталог, который включен в pythonpath
  • попробовал импортировать пример в python, он не дает модуля с именем example error

Документация в pybind11 не определяет, какие типы файлов должен генерировать компилятор, это должен быть файл библиотеки или dll?Есть ли какие-либо особые шаги, которые необходимо выполнить, кроме этого?

1 Ответ

0 голосов
/ 11 марта 2019

Я хотел бы повторить ответ @ pschill:

Попробуйте использовать поддерживаемый / документированный набор инструментов для сборки сначала , затем попытайтесь сделать что-то по проторенному пути:

https://pybind11.readthedocs.io/en/master/compiling.html

Я бы посоветовал вам использовать CMake, попробовать подмножество вашего примера кода, а затем собрать свою библиотеку с подробными параметрами (например, make VERBOSE=1), чтобы увидеть, что включает в себя добавление и как цели

Если вы все еще хотите сохранить рабочий процесс не-CMake, вы можете перенести соответствующие флаги на VS2017.

(При этом у CMake могут быть опции для генерации VS2017файлы проекта.)

...