Python
スクリプトをスクリプトにリンクしようとしていC++
ます。私はこれを見つけて動作します。
foo.cpp
#include <iostream>
class Foo{
public:
void bar(){
std::cout << "Test!" << std::endl;
}
};
extern "C" {
Foo* Foo_new(){ return new Foo(); }
void Foo_bar(Foo* foo){ foo->bar(); }
}
fooWrapper.py
from 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()
コンパイルするには、次を使用します。
g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
-soname
うまくいかない場合は、次を使用します-install_name
。
g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-install_name,libfoo.so -o libfoo.so foo.o
そして、ただ実行するには:
python fooWrapper.py
これは機能し、「テスト!」と表示されます。bar()
関数の。問題は、関数から関数に
いくつかのパラメーターを送信したいのですが、試したことが機能しません。Python
C++
これは私の試みです:
foo.cpp
#include <iostream>
class Foo{
public:
void bar(int number){
printf("Number is: %d", number);
std::cout << "Test!" << std::endl;
}
};
extern "C" {
Foo* Foo_new(){ return new Foo(); }
void Foo_bar(Foo* foo){ foo->bar(int number); }
}
fooWrapper.py
from 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)
num = 5
f = Foo()
f.bar(num)
このエラーが発生します。関数をコンパイルしようとしていC++
ます:
foo.cpp: In function ‘void Foo_bar(Foo*)’:
foo.cpp:13: error: expected primary-expression before ‘int’
私が間違っていることは何ですか?前もって感謝します。