Я использую 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