setuptools и cffi: как изменить путь к библиотеке - PullRequest
0 голосов
/ 04 ноября 2018

Я создаю программу на python с cffi для проверки моей библиотеки C / ASM на предмет реальных функций libc.

Я пытаюсь использовать setuptools для настройки моих разных модулей cffi. так вот мое файловое дерево:

enter image description here

вот мой libftasm_builder.py:

from cffi import FFI

ffiBuilder = FFI()

ffiBuilder.cdef("""
    void    ft_bzero(void *s, size_t n);
    char    *ft_strcat(char *dest, const char *src);
    int     ft_isalpha(int c);
    int     ft_isdigit(int c);
    int     ft_isalnum(int c);
    int     ft_isascii(int c);
    int     ft_isprint(int c);
    int     ft_toupper(int c);
    int     ft_tolower(int c);
    int     ft_puts(const char *s);
    size_t  ft_strlen(const char *s);
    void    *ft_memset(void *s, int c, size_t n);
    void    *ft_memcpy(void *dest, const void *src, size_t n);
    char    *ft_strdup(const char *s);
    void    ft_cat(int fd);
    int     ft_islower(int c);
    int     ft_isupper(int c);
""")

ffiBuilder.set_source("_libasm_cffi",
    """
        #include "libftasm.h"
    """,
    include_dirs=['/Users/sle-lieg/libasm/libftasm/header/'],
    library_dirs=['/Users/sle-lieg/libasm/libftasm/'],
    libraries=['ftasm']
)

if __name__ == "__main__":
    ffiBuilder.compile(verbose=True)

и мой setup.py:

from setuptools import setup

setup(
    setup_requires=["cffi>=1.0.0"],
    cffi_modules=[
        "libftasm_builder.py:ffiBuilder",
        "libc_builder.py:ffiBuilder"
    ],
    install_requires=["cffi>=1.0.0"]
)

Так что он прекрасно собирается, как вы можете видеть в дереве файлов, у меня есть мои cffi_files, но когда я пытаюсь выполнить свой libasm_tester.py, у меня появляется эта ошибка:

Traceback (most recent call last):
  File "libasm_tester.py", line 4, in <module>
    from _libasm_cffi import ffi, lib
ImportError: dlopen(/Users/sle-lieg/libasm/libftasm/lib_tester/build/lib.macosx-10.12-x86_64-3.7/_libasm_cffi.abi3.so, 2): Library not loaded: libftasm.dylib
  Referenced from: /Users/sle-lieg/libasm/libftasm/lib_tester/build/lib.macosx-10.12-x86_64-3.7/_libasm_cffi.abi3.so
  Reason: image not found

Я не понимаю, почему он пытается открыть lib из build / lib / _libasm_cffi.abi3.so, поскольку я говорю libasm_builder:

library_dirs=['/Users/sle-lieg/libasm/libftasm/']

что мне здесь не хватает? :(. спасибо !!

[EDIT]

в моем libasm_tester.py, я должен был добавить это поверх моего файла, чтобы иметь возможность импортировать cffi_modules:

import sys
sys.path.insert(0, '/Users/sle-lieg/libasm/libftasm/lib_tester/build/lib.macosx-10.12-x86_64-3.7/')

from _libasm_cffi import ffi, lib
from _libc_cffi import lib as libC

может быть причина? но если я не добавлю это, я не смогу импортировать модули cffi ...

1 Ответ

0 голосов
/ 07 ноября 2018

ок нашел решение:

export DYLD_LIBRARY_PATH=/path/to/your/lib

, что, очевидно, имеет смысл, поскольку библиотека не имеет пути по умолчанию, используемого dlopen () ...

...