Найти - Пользователи
Полная версия: Ошибка использования С- библиотеки с помощью Cython
Начало » Python для экспертов » Ошибка использования С- библиотеки с помощью Cython
1
Sanya28
В 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
Для будущих поколений напишу, что в pyx- файле не хватало заголовка:
# distutils: sources = Squaring/squaring.c
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB