首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setuptools和cffi:如何更改库路径

setuptools和cffi:如何更改库路径
EN

Stack Overflow用户
提问于 2018-11-04 19:38:59
回答 1查看 1.1K关注 0票数 0

我正在用cffi创建一个python程序,用实际的libc函数测试我的C/ASM库。

我尝试使用setuptools来设置我的不同的cffi模块。这是我的家谱:

这是我的libftasm_builder.py:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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时,我有以下错误:

代码语言:javascript
复制
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

我不明白为什么它会尝试从build/ lib /_libasm_cffi.abi 3打开库,因为我告诉了libasm_builder:

代码语言:javascript
复制
library_dirs=['/Users/sle-lieg/libasm/libftasm/']

我在这里漏掉了什么?谢谢!!

编辑

在我的libasm_tester.py中,为了能够导入cffi_modules,我必须将它添加到文件的顶部:

代码语言:javascript
复制
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模块.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-07 17:19:14

ok找到了一个解决方案:

代码语言:javascript
复制
export DYLD_LIBRARY_PATH=/path/to/your/lib

这显然是有意义的,因为库不是dlopen()使用的默认路径.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53144669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档