galaxyblazer Ответов: 1

Глотни Питоновую обертку.


Всем привет. У меня есть некоторые проблемы, чтобы сделать обертку определенным образом .

У меня есть библиотека на C++ (libmylib.так, к примеру), который компилируется в /usr папку/местные/lib и у меня есть библиотеки MyLib.заголовочный файл H в /usr/местные/включать.
Вот в проекте "MyLib".ч:
#pragma once
#include <string&gt>

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 .

Итак, вопрос . Как сделать то, что я хочу?

Что я уже пробовал:

Я попробовал способ, который описал в задаче.

1 Ответов

Рейтинг:
2

Albert Holguin

Просто просматривая ваш код, если он скомпилирован, это должно работать... что это за неопределенные символы, на которые он жалуется? ...возможно, вы забыли связать зависимость (то есть libpython-это зависимость, которая изначально может быть упущена из виду).