Я пытаюсь импортировать класс C ++ в Python.Я знаю, что мог бы использовать BoostPython, SWIG или Cython, но просто для дидактических целей я пытаюсь вручную экспортировать методы и функции C ++ с extern "C"
.Короче говоря, я пытаюсь повторить этот .
Моя среда - Windows 10 с Anaconda 3 и Python 3.6.Я установил mingw64 4.8.3 как компилятор C / C ++.
Это мой foo.cpp
:
#include <iostream>
// A simple class with a constuctor and some methods...
class Foo
{
public:
Foo(int);
void bar();
int foobar(int);
private:
int val;
};
Foo::Foo(int n)
{
val = n;
}
void Foo::bar()
{
std::cout << "Value is " << val << std::endl;
}
int Foo::foobar(int n)
{
return val + n;
}
// Define C functions for the C++ class - as ctypes can only talk to C...
extern "C"
{
Foo* Foo_new(int n) {return new Foo(n);}
void Foo_bar(Foo* foo) {foo->bar();}
int Foo_foobar(Foo* foo, int n) {return foo->foobar(n);}
}
Я скомпилировал таким образом: g++ -c -fPIC foo.cpp -o foo.o
.Вывод:
foo.cpp:1:0: warning: -fPIC ignored for target (all code is position independent) [enabled by default]
#include <iostream>
^
Затем я скомпилировал следующим образом: g++ -shared -Wl,-soname,libfoo.dll -o libfoo.dll foo.o
не получая ошибок / предупреждений.Файл libfoo.dll
появился в папке.
Когда я пытаюсь в Python:
import ctypes
lib = ctypes.windll.LoadLibrary('libfoo.dll')
я получаю ошибку OSError: [WinError 126] the specified module could not be found
.Мой рабочий каталог Python - это папка libfoo.dll
.
Я попытался создать простую библиотеку C-HelloWorld: я скомпилировал таким же образом (часть gcc
вместо g++
), и мне это удалосьзагрузка его в Python.
В чем проблема?Это в инструкции по компиляции?Или в коде?