Cython으로 바꾸거나 변환하려고하는 C++ 프로그램이 있습니다. 그것은 어떤 이유로 든 가져 오기를 위해 작동하는 모듈을 만들지 않을 특별한 라이브러리를 사용합니다. 그런데 C++ 프로그램이 있습니다. 여기에 setup.py가 있습니다 :정의되지 않은 기호로 인한 Cython 빌드
ext_modules = [
Extension(
name="libnmfpy",
sources=["interface/nmf_lib.pyx"],
include_dirs = ["../src/", numpy.get_include()],
libraries=["nmf","mpi_cxx","mpi","m"],
library_dirs=["../build/Linux/bin.release","/usr/local/lib/","/usr/lib"],
language="c++",)
]
setup(
name = 'libnmfpy',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules,
)
나는 그것이 문제를 일으키는 것으로 보이는 libnmf입니다. libnmf의 첫 번째 빌드는이 오류를 생성하는 스크립트를 일으킬 것입니다 : 내가 -fPIC으로 libnmf 다시 때
/usr/bin/ld: ../build/Linux/bin.release/libnmf.a(nmf.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
../build/Linux/bin.release/libnmf.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
이 설정은 libnmfpy.so 생성을,하지만 난 다른 스크립트에 있음을 가져올 때, 나는 전술을 얻을 것 정의되지 않은 심볼 :
nm libnmfpy.so | grep _ZN4elem6lapack3SVDEiiPdiS1_
U _ZN4elem6lapack3SVDEiiPdiS1_
nm ../build/Linux/bin.release/libnmf.a | grep _ZN4elem6lapack3SVDEiiPdiS1_
U _ZN4elem6lapack3SVDEiiPdiS1_
나는 오류의 원인을 추측 무엇 어떤 :
Traceback (most recent call last):
File "test.py", line 1, in <module>
import libnmfpy
ImportError: $path/cython/libnmfpy.so: undefined symbol: _ZN4elem6lapack3SVDEiiPdiS1_
이 도움이 될 경우, 여기 내 검색 제안 뭔가입니다.
nm $another_path/lib/libelemental.a | grep _ZN4elem6lapack3SVDEiiPdiS1_
0000000000005290 T _ZN4elem6lapack3SVDEiiPdiS1_
나는 아직 라이브러리와 링커 너무 익숙하지 않다, 그래서 어떤 도움을 주시면 감사하겠습니다 : 나는 내가 생각하기에 내장되어 libnmf 잘못된 라이브러리가 보면. 감사합니다
편집 : 약간 파고 나 뭔가를 깨닫게했다. Mac OS X과 Linux 사이에 차이점이 있습니까? 내가 일하는 사람들이 원래 이런 오류를보고하지 않았다.
문제를 해결 했습니까? MacOSX/Linux의 차이점에 대해 10.9 OSX 컴파일러는 [libstdC++] 대신에'libC++'로 기본 설정되어 있기 때문에 [here] (https://support.enthought.com/entries/26184115-GCC-Clang-and- Cython-in-OS-X-10-9- 매버릭스) 내가 일하고있는 프로젝트에서 C++ 코드를 하나의 라이브러리에 연결하고 cython 코드를 다른 라이브러리에 연결하려고했습니다. 이로 인해 정의되지 않은 기호 오류가 발생합니다. – gg349