Python SWIG: Python атрибуты модуля #define отличаются от внутренних C определяет - PullRequest
0 голосов
/ 04 марта 2020

Я использую SWIG, чтобы обернуть Python источники библиотеки C, которую я разработал. В зависимости от платформы развертывания некоторые определения времени компиляции используются для перезаписи параметров библиотеки по умолчанию, которые содержатся в нескольких заголовочных файлах.

Моя проблема заключается в том, что, хотя при использовании различных обернутых функций в модели результат будет таким, как ожидалось (с использованием параметров не по умолчанию), всякий раз, когда я обращаюсь к обернутым #defines в сгенерированном модуле, возвращаемое значение значение всегда по умолчанию.

Это упрощенная версия моей настройки:

offset.h

#ifndef FIRST_OFFSET
#define FIRST_OFFSET      10
#endif

int get_first_offset(void);

offset. c

#include "offset.h"
int get_first_offset(void) {
     return FIRST_OFFSET;
}

offset.i

%module Offset
%{
    #include "offset.h"
}

%inline %{
    // Some helpers
}

%include include/offset.h

setup.py

#Previous code
ext_modules = Extension(name="_Offset",
                        include_dirs=["include"]
                        define_macros=[('FIRST_OFFSET','20')],
                        sources=["offset.i", "offset.c"],
                        language="c")
setup(name=name, version=version, ext_modules=[ext_modules])

test.py

import Offset

print(str(Offset.FIRST_OFFSET))
print(str(Offset.get_first_offset()))

Консольный вывод:

10
20

Есть ли способ получить Offset.FIRST_OFFSET, чтобы соответствовать Offset.get_first_offset()? Я хотел бы иметь возможность получить доступ к значению непосредственно из упакованного #define, поскольку в настоящее время я пишу аналогичные функции-оболочки для get_x_offset, который не масштабируется: (!

EDIT: добавлен файл offset.i

...