Ошибка импорта при загрузке моей общей библиотеки в коде Python.

Я хотел бы задать вопрос о создании следующего кода. Проблема в том, что я не могу вызвать соблюдаемый .so файл из объекта python. Возможно, причина в том, что python не может найти одну из библиотек наддува (libboost_python.dylib). Но у $ DYLD_LIBRARY_PATH есть каталог, в который был установлен libboost_python.dylib.

//klass.cxx
#include <boost/python.hpp>
#include <string>
#include <iostream>

class World
{
public:
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};

BOOST_PYTHON_MODULE( klass )
{
using namespace boost::python;

class_<World>("World")
.def("greet",&World::greet)
.def("set",&World::set)
;
}

Я предполагаю, что получу доступ к этому классу c ++ и его функциям mender из кода Python. Например,

# klass.py
import klass
a = klass.World()

И makefile для сборки этого кода

#makefile
CONDADIR=/Users/XYZ/.anyenv/envs/pyenv/versions/anaconda2-4.0.0
INCDIR=$(CONDADIR)/include
PYDIR=$(INCDIR)/python2.7
OPT=-I$(INCDIR) -I$(PYDIR) -L$(CONDADIR)/lib  -lpython2.7 -lboost_python
#RPATHOPT=-rpath -Xlinker $(CONDADIR)/lib

all:klass.cxx
g++ $(RPATHOPT) -fPIC -shared $(OPT) -o klass.so klass.cxx

После сборки этого кода команда make выдала «klass.so» в моем рабочем каталоге. Теперь запустите код на языке Python, который называет класс C ++ «World».

[XYZ@OSX wrapper_boost] python klass.py
Traceback (most recent call last):
File "klass.py", line 2, in <module>
import klass
ImportError: dlopen(/Users/XYZ/Work/python/wrapper_boost/klass.so,
2):Library not loaded: @rpath/./libboost_python.dylib
Referenced from: /Users/XYZ/Work/python/wrapper_boost/klass.so
Reason: image not found

DYLD_LIBRARY_PATH — это …

[XYZ@OSX wrapper_boost] echo $DYLD_LIBRARY_PATH
:/usr/local/Cellar/openssl/1.0.2d_1:/usr/local/Cellar/openssl/1.0.2d_1/lib:/Users/XYZ/.anyenv/envs/pyenv/versions/anaconda2-4.0.0/lib

Библиотеки, которые связаны с созданным .so файлом

[XYZ@OSX wrapper_boost] otool -L klass.so
klass.so:
klass.so (compatibility version 0.0.0, current version 0.0.0)
libpython2.7.dylib (compatibility version 2.7.0, current version 2.7.0)
@rpath/./libboost_python.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

Любые советы?

Бест Хаши

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]