Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 13, 2019 10:35:00

Sanya28
Зарегистрирован: 2019-11-10
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка использования С- библиотеки с помощью Cython

В Qt Creator я создал маленьку библиотеку возведения в квадрат:
squaring.h:

int squaring(int a);

squaring.c:
#include "squaring.h"
int squaring(int a){
return a * a;
}

В Eclipse я создал маленький Python- проект, который пытается использовать эту библиотеку (по инструкции с офф. сайта):
cSquaring.pxd:
 cdef extern from "/home/denis/Squaring/squaring.h":
    int squaring(int a)

Functions.pix:
 cimport cSquaring
cpdef int count(int value):
    return cSquaring.squaring(value)

setup.py:
 from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
setup(ext_modules=cythonize([Extension("Functions", ["Functions.pyx"])]))

main.py:
 from Functions import count
if __name__ == '__main__':
    data = 1
    returned = count(data)
    print(returned)

Выполнил компиляцию С- кода с помощью:
python3 setup.py build_ext -i

Но когда я запускаю main.py на выполнение, то получаю такую ошибку:
File “/home/denis/.p2/pool/plugins/org.python.pydev.core_7.3.0.201908161924/pysrc/pydevd.py”, line 2643, in <module>
main()
File “/home/denis/.p2/pool/plugins/org.python.pydev.core_7.3.0.201908161924/pysrc/pydevd.py”, line 2636, in main
globals = debugger.run(setup, None, None, is_module)
File “/home/denis/.p2/pool/plugins/org.python.pydev.core_7.3.0.201908161924/pysrc/pydevd.py”, line 1920, in run
return self._exec(is_module, entry_point_fn, module_name, file, globals, locals)
File “/home/denis/.p2/pool/plugins/org.python.pydev.core_7.3.0.201908161924/pysrc/pydevd.py”, line 1927, in _exec
pydev_imports.execfile(file, globals, locals) # execute the script
File “/home/denis/.p2/pool/plugins/org.python.pydev.core_7.3.0.201908161924/pysrc/_pydev_imps/_pydev_execfile.py”, line 25, in execfile
exec(compile(contents+“\n”, file, ‘exec’), glob, loc)
File “/home/denis/eclipse-workspace/ConnectionWithCPlusPlus/main.py”, line 1, in <module>
from Functions import count
ImportError: /home/denis/eclipse-workspace/ConnectionWithCPlusPlus/Functions.cpython-37m-x86_64-linux-gnu.so: undefined symbol: squaring

Причем другой проект где используется код на Cython (т.е. там я не создавал С- библиотеку, а писал код непосредственно на Cython) работает отлично. В чем проблема?

Отредактировано Sanya28 (Ноя. 13, 2019 14:03:00)

Офлайн

#2 Ноя. 13, 2019 15:28:07

Sanya28
Зарегистрирован: 2019-11-10
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка использования С- библиотеки с помощью Cython

Для будущих поколений напишу, что в pyx- файле не хватало заголовка:

# distutils: sources = Squaring/squaring.c

Отредактировано Sanya28 (Ноя. 13, 2019 15:50:52)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version