Часть библиотеки Python, над которой я работаю, написана в цинтоне. Мне нужно использовать библиотеку Linbox C ++ (которая зависит от библиотеки Givaro). Просто чтобы протестировать, я написал небольшую функцию C ++, которая питает данные, доступные из цинтона, что-то делает с Givaro и возвращает данные, доступные из цинтона. Все компилируется правильно, но когда я запускаю тест, я получаю следующую ошибку: < /p>
// fastcomputation.cpp
#include
#include
using namespace std;
int kernel(vector A, int rank, int nullity, double field) {
Givaro::GFqDom F(field);
return 1;
}
< /code>
// fastcomputation.hpp
#include
int kernel(std::vector A, int rank, int nullity, double field);
< /code>
# matrices.pyx
# distutils: language = c++
from libcpp.vector cimport vector
cdef extern from "fastcomputation.hpp":
int kernel(vector[int] A, int rank, int nullity, double field)
cpdef pkernel(vector[int] A, int rank, int nullity, double field):
print(kernel(A, rank, nullity, field))
< /code>
# setup.py
from setuptools import setup, Extension
from Cython.Build import cythonize
import os
import numpy
os.environ["CC"] = "gcc-14"
os.environ["CXX"] = "g++-14"
extensions = [
Extension(
"*",
["/*.pyx", "/fastcomputation.cpp"],
include_dirs=[
numpy.get_include(),
"",
"/opt/homebrew/Cellar/linbox/include",
"/opt/homebrew/Cellar/fflas-ffpack/2.5.0/include",
"/opt/homebrew/Cellar/givaro/4.2.0_1/include",
"/opt/homebrew/Cellar/gmp/6.3.0/include",
"/opt/homebrew/Cellar/libomp/20.1.0/include"
],
library_dirs=[
"/opt/homebrew/Cellar/linbox/lib",
"/opt/homebrew/Cellar/fflas-ffpack/2.5.0/lib",
"/opt/homebrew/Cellar/givaro/4.2.0_1/lib",
"/opt/homebrew/Cellar/gmp/6.3.0/lib",
"/opt/homebrew/Cellar/libomp/20.1.0/lib"
],
runtime_library_dirs=[
"/opt/homebrew/Cellar/linbox/lib",
"/opt/homebrew/Cellar/fflas-ffpack/2.5.0/lib",
"/opt/homebrew/Cellar/givaro/4.2.0_1/lib",
"/opt/homebrew/Cellar/gmp/6.3.0/lib",
"/opt/homebrew/Cellar/libomp/20.1.0/lib"
],
libraries=["linbox", "givaro"],
language="c++"
)
]
setup(
ext_modules=cythonize(extensions, annotate=True, language_level="3")
)
Я не эксперт (или даже этот способный) при получении C ++ для компиляции, поэтому возможно, что я ошибся, и я полностью оставляю что -то. Проблема в том, что, , не пытаясь использовать Givaro, все компилизируется и работает , но мне нужно использовать Givaro.
Часть библиотеки Python, над которой я работаю, написана в цинтоне. Мне нужно использовать библиотеку Linbox C ++ (которая зависит от библиотеки Givaro). Просто чтобы протестировать, я написал небольшую функцию C ++, которая питает данные, доступные из цинтона, что-то делает с Givaro и возвращает данные, доступные из цинтона. Все компилируется правильно, но когда я запускаю тест, я получаю следующую ошибку: < /p> [code]ImportError: dlopen( /matrices.cpython-311-darwin.so, 0x0002): symbol not found in flat namespace '__ZN6GivarolsERSoRKNS_7IntegerE'[/code] Запуск nm on matrices.cpython-311-darwin.so , похоже, символ не определен, потому что я получаю U __zn6givarolserskns_7integere . Вот мой MWE: < /p> [code]// fastcomputation.cpp
#include #include
using namespace std;
int kernel(vector A, int rank, int nullity, double field) { Givaro::GFqDom F(field); return 1; } < /code> // fastcomputation.hpp
#include
int kernel(std::vector A, int rank, int nullity, double field); < /code> # matrices.pyx # distutils: language = c++
from libcpp.vector cimport vector
cdef extern from "fastcomputation.hpp": int kernel(vector[int] A, int rank, int nullity, double field)
cpdef pkernel(vector[int] A, int rank, int nullity, double field): print(kernel(A, rank, nullity, field)) < /code> # setup.py
from setuptools import setup, Extension from Cython.Build import cythonize import os import numpy
setup( ext_modules=cythonize(extensions, annotate=True, language_level="3") ) [/code] Я не эксперт (или даже этот способный) при получении C ++ для компиляции, поэтому возможно, что я ошибся, и я полностью оставляю что -то. Проблема в том, что, , не пытаясь использовать Givaro, все компилизируется и работает , но мне нужно использовать Givaro.
Часть библиотеки Python, над которой я работаю, написана в цинтоне. Мне нужно использовать библиотеку Linbox C ++ (которая зависит от библиотеки Givaro). Просто чтобы протестировать, я написал небольшую функцию C ++, которая питает данные, доступные...
Часть библиотеки Python, над которой я работаю, написана в цинтоне. Мне нужно использовать библиотеку Linbox C ++ (которая зависит от библиотеки Givaro). Просто чтобы протестировать, я написал небольшую функцию C ++, которая питает данные, доступные...
Часть библиотеки Python, над которой я работаю, написана в цинтоне. Мне нужно использовать библиотеку Linbox C ++ (которая зависит от библиотеки Givaro). Просто чтобы протестировать, я написал небольшую функцию C ++, которая питает данные, доступные...
Часть библиотеки Python, над которой я работаю, написана в цинтоне. Мне нужно использовать библиотеку Linbox C ++ (которая зависит от библиотеки Givaro). Просто чтобы протестировать, я написал небольшую функцию C ++, которая питает данные, доступные...
Часть библиотеки Python, над которой я работаю, написана в цинтоне. Мне нужно использовать библиотеку Linbox C ++ (которая зависит от библиотеки Givaro). Просто чтобы протестировать, я написал небольшую функцию C ++, которая питает данные, доступные...