Проблема в Compling метод C ++ в Eclipse и вызов метода C ++ из Python

Простой пример C ++ класса, с которым я хочу поговорить в файле с именем foo.cpp

#include <iostream>

Поскольку ctypes может общаться только с функциями C, вам нужно предоставить тех, кто объявляет их как внешние «C»

extern "C" {
Foo* Foo_new(){ return new Foo(); }
void Foo_bar(Foo* foo){ foo->bar(); }
}

class Foo{
public:
void bar(){
std::cout << "Hello" << std::endl;
}
};

скомпилируйте это в общую библиотеку

g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so  foo.o

наконец я написал оболочку Python

из ctypes import cdll
lib = cdll.LoadLibrary (‘./ libfoo.so’)

class Foo(object):
def __init__(self):
self.obj = lib.Foo_new()

def bar(self):
lib.Foo_bar(self.obj)
f = Foo()
f.bar() #prints "Hello" on the screen

«Мое главное намерение — скомпилировать код C ++ в eclipse и вызвать функцию C ++ из python в Linux». Это прекрасно работает, когда я скомпилировал код C ++ в Linux и вызвал метод C ++ из python в Linux. Но это не сработает, если я скомпилирую код C ++ в eclipse и вызову метод C ++ из python в Linux.

Error message:

symbol not found

Я новичок в цепочке инструментов eclipse, но я даю опцию компилятора и опцию связывания, как в этом
g ++ -c -fPIC foo.cpp -o foo.o
g ++ -shared -Wl, -soname, libfoo.so -o libfoo.so foo.o

Снимок параметров компилятора eclipse и параметров компоновки будет высоко оценен. Пожалуйста, помогите мне разобраться в этом вопросе. заранее спасибо

3

Решение

Вам нужно создать два проекта в Eclipse.

  1. Makefile проект с существующим кодом. (Файл-> Новый-> Makefile проект с существующим кодом). В этом проекте вы должны указать свой файл foo.cpp. Затем в папке проекта вы должны создать файл с именем «Makefile». Makefile должен содержать следующие строки:

    все:

    g ++ -c -fPIC foo.cpp -o foo.o

    g ++ -shared -W1, -soname, libfoo.so -o libfoo.so foo.o

    чистить:

    rm -f libfoo.so

Затем Вы должны создать правила («все» и «очистить») для этого проекта в окне «Создать цель». Если вы не видите это окно, вы должны сделать Окно-> Показать вид-> Сделать цель. Таким образом, вы можете создать файл libfoo.so, используя Eclipse, если дважды щелкнуть правило «all» в представлении «Make target».

  1. На данный момент вы можете создать проект PyDev с файлом foo.py. Если вы не знаете о PyDev, вы должны пойти в этот сайт. Это плагин Eclipse для языка Python. Когда вы установите этот плагин, вы сможете работать с вашим файлом python в Eclipse.

Смотрите некоторые изображения.
введите описание изображения здесь
введите описание изображения здесь

2

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


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