Cython unable to find shared object file

后端 未结 2 1852
青春惊慌失措
青春惊慌失措 2021-01-13 13:25

I am trying to link to my own C library from Cython, following the directions I\'ve found on the web, including this answer:

Using Cython To Link Python To A Shared

相关标签:
2条回答
  • 2021-01-13 14:12

    I'm self-answering, in case anyone else runs into the same problem. Looks like the answers are here:

    Set LD_LIBRARY_PATH before importing in python

    Changing LD_LIBRARY_PATH at runtime for ctypes

    According to these answers (and my experience), the linker reads LD_LIBRARY_PATH when python is launched, so changing it from within python doesn't have any useful effect, at least not the effect I was hoping for. The only solution is to either wrap python in a shell script that sets LD_LIBRARY_PATH, or else drop the shared object somewhere on the linker search path.

    Kind of a pain, but it is what it is.

    0 讨论(0)
  • 2021-01-13 14:14

    I have fixed it by change setup.py.

    1. I have a C++ dynamic shared library called "libtmsmdreader.so". and a header file named "TmsMdReader.hpp"
    2. I wrapper C++ shared library to cython library called "tmsmdreader-pythonxxxxxx.so"
    from setuptools import setup 
    from distutils.extension import Extension
    from Cython.Build import cythonize
    
    setup(
        name="tmsmdreader",
        ext_modules=cythonize([
            Extension(
                name="tmsmdreader",
                language="c++",
                sources=["TmsMdReaderApi.pyx"],
                libraries=["tmsmdreader"],
                library_dirs=["."],
                include_dirs=["."],
                extra_compile_args=["-std=c++14"],
                compiler_directives={'language_level': 3},
                runtime_library_dirs=["."])
                ]))
    

    library_dirs=["."] and runtime_library_dirs=["."] can fixed LD_LIBRARY_PATH if libtmsmdreader.so in python scripy directory

    0 讨论(0)
提交回复
热议问题