Я довольно новичок в SWIG (и c ++) и пытаюсь обернуть что-то с именем p_convolve.hpp из библиотеки с именем evergreenforest в python (Вы можете проверить это здесь: https://bitbucket.org/orserang/evergreenforest/src/master/). Я не могу получить очень далеко, потому что SWIG выдает синтаксическую ошибку, когда достигает использования макроса, определенного в другом месте библиотеки. Я использую c ++ 11, python 2.7 и последнюю версию swig.
Я только начал, на самом деле еще не пытался обернуть и привести в порядок карты типов, просто хотел посмотреть, скомпилируется ли он, и я получил синтаксическую ошибку. Ошибка в строке, которая использует то, что я считаю, называется макросом, который определен в FLOAT_TYPE.hpp в утилитах для библиотеки. Я опубликую код для этого файла ниже, а также строку, которая вызывает ошибку. Я еще ничего не пробовал, потому что я не смог найти "macro" или "define" в документации по swig и понятия не имею, что делать. Я также использую numpy.i, с которым я еще не дошел, чтобы на самом деле что-то делать, но было бы полезно, если бы какие-то решения тоже хорошо с ним шли.
//The macro, or at least that's what I think it's called, which is
//included in the problem file
#ifndef _FLOAT_TYPE_HPP
#define _FLOAT_TYPE_HPP
#ifdef FAST_FLOAT
typedef float FLOAT_TYPE;
#else
#ifdef ACCURATE_FLOAT
typedef long double FLOAT_TYPE;
#else
// standard
typedef double FLOAT_TYPE;
#endif
#endif
#endif
Строка, которая вызывает проблему из p_convolve.hpp:
const FLOAT_TYPE tau_denom(1e-9L);
Файл .i, p_convolve.i:
%module p_convolve
%include "std_vector.i"
%{
#define SWIG_FILE_WITH_INIT
#include "p_convolve.hpp"
#include <array>
#include <set>
#include "naive_convolve.hpp"
#include "fft_convolve.hpp"
#include "../Utility/FLOAT_TYPE.hpp"
%}
%include "numpy.i"
%init %{
import_array();
%}
%include "p_convolve.hpp"
И, наконец, просто чтобы быть точным, то, что я собираю:
swig -python -c++ p_convolve.i
g++ -fpic -c p_convolve_wrap.cxx -I/usr/include/python2.7 -I/home/sean/Desktop/SerangLab/Swig/numpy/numpy/core/include/ -I/home/sean/.local/lib/python2.7/site-packages/numpy/core/include/numpy/
g++ -shared p_convolve_wrap.o -o _p_convolve.so
Мои ожидаемые или ожидаемые результаты состоят в том, что эта вещь сможет скомпилироваться в модуль - он не будет хорошим или полезным, пока я не получу таблицы типов и тому подобное, но просто чтобы избавиться от них. Синтаксические ошибки - это текущая цель. Заранее спасибо!