Apabila memuatkan modul Python yang ditulis dalam bahasa C, ia menggesa bahawa fungsi dalam .so tidak dijumpai?
怪我咯
怪我咯 2017-05-18 11:00:29
0
1
514

Saya cuba menulis modul Python dalam bahasa C, tetapi program C saya sendiri bergantung pada pustaka pihak ketiga (libwiringPi.so) Apabila saya mengimport perpustakaan yang saya hasilkan dalam program sumber Python, saya akan digesa supaya fungsi tersebut belum Definisi, semua fungsi ini ada dalam pustaka pihak ketiga itu. Bagaimanakah cara saya menyusunnya supaya modul yang saya susun boleh dipautkan secara dinamik ke pustaka itu?

Saya juga cuba menggunakan gcc untuk menyusun perpustakaan pautan dinamik secara manual, dan kemudian menggunakan cyes, tetapi ralat yang sama telah dilaporkan; pakej kod.

Kod program C saya

/* Example of embedding Python in another program */ #include "python2.7/Python.h" #include  void initdht11(void); /* Forward */ int main(int argc, char **argv) { /* Initialize the Python interpreter. Required. */ Py_Initialize(); /* Add a static module */ initdht11(); /* Exit, cleaning up the interpreter */ Py_Exit(0); return 0; } /* A static module */ /* 'self' is not used */ static PyObject * dht11_foo(PyObject *self, PyObject* args) { wiringPiSetup(); return PyInt_FromLong(42L); } static PyMethodDef dht11_methods[] = { {"foo", dht11_foo, METH_NOARGS, "Return the meaning of everything."}, {NULL, NULL} /* sentinel */ }; void initdht11(void) { PyImport_AddModule("dht11"); Py_InitModule("dht11", dht11_methods); }

setup.py

from distutils.core import setup, Extension dht11module = Extension('dht11', library_dirs = ['/usr/lib'], include_dirs = ['/usr/include'], sources = ['math.c']) setup (name = 'dht11', version = '1.0', description = 'This is a demo package', author = 'Martin v. Loewis', author_email = 'martin@v.loewis.de', url = 'https://docs.python.org/extending/building', long_description = ''' This is really just a demo package. ''', ext_modules = [dht11module])

Mesej ralat

Traceback (most recent call last): File "test.py", line 1, in  import dht11 ImportError: /usr/local/lib/python2.7/dist-packages/dht11.so: undefined symbol: wiringPiSetup
怪我咯
怪我咯

走同样的路,发现不同的人生

membalas semua (1)
左手右手慢动作

Hei, saya bangun pagi dan tiba-tiba terfikir, jadi saya cepat mencubanya.

Masalah ini berlaku kerana anda perlu menambah-lwiringPi选项来引用这个库,但是我仔细看了以下执行python setup.py build之后执行的编译命令,根本就没有加这个选项,解决方式很简单,只需要修改一下setup.py,在Extension里面加上libraries = ['wiringPi']parameter ini semasa menyusun setup.py yang diubah suai menjadi seperti berikut

from distutils.core import setup, Extension dht11module = Extension('dht11', library_dirs = ['/usr/lib'], #指定库的目录 include_dirs = ['/usr/include'], #制定头文件的目录 libraries = ['wiringPi'], #指定库的名称 sources = ['math.c']) setup (name = 'dht11', version = '1.0', description = 'This is a demo package', author = 'Martin v. Loewis', author_email = 'martin@v.loewis.de', url = 'https://docs.python.org/extending/building', long_description = ''' This is really just a demo package. ''', ext_modules = [dht11module])
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!