0

私は基本的に、C++ で開発したライブラリにアクセスできる Python でラッパーを開発しようとしています。これは単にテスト目的であるため、現時点では非常に基本的なものです。

私の .h ファイルには次のものがあります。

#include <iostream>

class Foo {

  public:

    void bar() {
        std::cout << "Hello world";
    }
};

私のPythonファイルでは、次を使用して呼び出します。

from ctypes import cdll 

lib = cdll.LoadLibary('./libfoo.1.dylib')

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

     def bar(self):
            lib.Foo_bar(self.obj)

f = Foo()
f.bar()

Mac の GCC で共有ライブラリを作成できるとは思えないため、.dylib を作成しましたが、間違っている可能性があります。次のエラーが表示されます。

Traceback (most recent call last):
File "main.py", line 3, in <module>
lib = cdll.LoadLibary('./libfoo.1.dylib')
File     
 "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py",   
line 423, in __getattr__
dll = self._dlltype(name)
File
 "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py",
line 353, in __init__
self._handle = _dlopen(self._name, mode)
OSError: dlopen(LoadLibary, 6): image not found

しかし、それが見つかり、ライブラリ (.dylib) は実際には同じディレクトリにあります..どこが間違っているのでしょうか?

4

1 に答える 1

1

The ctypes library doesn't know about c++, you need to write your shared library in c if you want to use ctypes.

You can look at something like http://www.swig.org instead, which can hook into a shared library written in c++.

于 2013-09-24T21:06:57.097 に答える