Глотни Питоновую обертку.
Всем привет. У меня есть некоторые проблемы, чтобы сделать обертку определенным образом .
У меня есть библиотека на C++ (libmylib.так, к примеру), который компилируется в /usr папку/местные/lib и у меня есть библиотеки MyLib.заголовочный файл H в /usr/местные/включать.
Вот в проекте "MyLib".ч:
#pragma once #include <string>> myEnum {foo=0, bar}; myEnum getResult(const std::string& path, std::string& result);
И у меня есть файл интерфейса для всего этого с некоторой перегрузкой метода getResult. (В python все строки неизменяемы, и я не могу получить результат из входного параметра . )
%module mylib %include <std_string.i> %{ #include "mylib.h" %} %inline %{ std::string getResult(const std::string& path) { std::string temp; getResult(path, temp); return temp; } %}
В этой комбинации у меня есть обертка, которая работает .
Но!!!
Я не хочу иметь никакой реализации функции в интерфейсном файле. По этой причине я пытаюсь поместить перегруженный метод в дополнительный файл (например mylib_m.h/.cpp).
mylib_m.ч:
#include <string> std::string getResult(const std::string& path);
mylib_m.cpp:
#include "mylib_m.h" #include "mylib.h" std::string getResult(const std::string& path) { std::string temp; getResult(path, temp); return temp; }
И чем я изменил свой файл интерфейса на этот :
модифицированный файл. i
%module mylib %include <std_string.i> %include "mylib_m.h" %{ %}
Когда я построил свою оболочку с этими модификациями, я обнаружил, что она не работает, когда я пытаюсь импортировать ее в код python. У меня есть ошибка: в нем есть неопределенные символы. _mylib.so .
Итак, вопрос . Как сделать то, что я хочу?
Что я уже пробовал:
Я попробовал способ, который описал в задаче.