首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用cffi导入本地库

如何使用cffi导入本地库
EN

Stack Overflow用户
提问于 2015-01-27 09:45:20
回答 2查看 1.5K关注 0票数 0

我有如下所示的test.c (与python文件相同的dir )

代码语言:javascript
复制
#include <stdio.h>
void myprint();  
void myprint()
{
printf("hi\n");
}

现在我想将它“导入”到我的python脚本中。

代码语言:javascript
复制
from cffi import FFI
ffi = FFI()
ffi.cdef("void myprint();")
C = ffi.verify("""
#include "test.c"
""")

使用cffi文档中的示例可以很好地工作。

抱歉,追踪错误很大.

代码语言:javascript
复制
__pycache__/_cffi__xd52cd3eax2b8a27ce.c:185:18: fatal error: test.c: No such file or directory
 #include "test.c"
                  ^
compilation terminated.
Traceback (most recent call last):
  File "/usr/lib/python3.4/distutils/unixccompiler.py", line 116, in _compile
    extra_postargs)
  File "/usr/lib/python3.4/distutils/ccompiler.py", line 909, in spawn
    spawn(cmd, dry_run=self.dry_run)
  File "/usr/lib/python3.4/distutils/spawn.py", line 36, in spawn
    _spawn_posix(cmd, search_path, dry_run=dry_run)
  File "/usr/lib/python3.4/distutils/spawn.py", line 162, in _spawn_posix
    % (cmd, exit_status))
distutils.errors.DistutilsExecError: command 'x86_64-linux-gnu-gcc' failed with exit status 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/cffi/ffiplatform.py", line 48, in _build
    dist.run_command('build_ext')
  File "/usr/lib/python3.4/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/usr/lib/python3.4/distutils/command/build_ext.py", line 348, in run
    self.build_extensions()
  File "/usr/lib/python3.4/distutils/command/build_ext.py", line 457, in build_extensions
    self.build_extension(ext)
  File "/usr/lib/python3.4/distutils/command/build_ext.py", line 512, in build_extension
    depends=ext.depends)
  File "/usr/lib/python3.4/distutils/ccompiler.py", line 574, in compile
    self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
  File "/usr/lib/python3.4/distutils/unixccompiler.py", line 118, in _compile
    raise CompileError(msg)
distutils.errors.CompileError: command 'x86_64-linux-gnu-gcc' failed with exit status 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "pynfc_nfx.py", line 11, in <module>
    """)
  File "/usr/local/lib/python3.4/dist-packages/cffi/api.py", line 340, in verify
    lib = self.verifier.load_library()
  File "/usr/local/lib/python3.4/dist-packages/cffi/verifier.py", line 74, in load_library
    self._compile_module()
  File "/usr/local/lib/python3.4/dist-packages/cffi/verifier.py", line 139, in _compile_module
    outputfilename = ffiplatform.compile(tmpdir, self.get_extension())
  File "/usr/local/lib/python3.4/dist-packages/cffi/ffiplatform.py", line 25, in compile
    outputfilename = _build(tmpdir, ext)
  File "/usr/local/lib/python3.4/dist-packages/cffi/ffiplatform.py", line 51, in _build
    raise VerificationError('%s: %s' % (e.__class__.__name__, e))
cffi.ffiplatform.VerificationError: CompileError: command 'x86_64-linux-gnu-gcc' failed with exit status 1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-28 16:18:19

fatal error: test.c: No such file or directory

试试ffi.verify(..., include_dirs=['.'])。编译器不是从当前目录调用的,而是从cffi创建其临时文件的某个临时目录调用的。

票数 2
EN

Stack Overflow用户

发布于 2015-01-27 11:18:31

你在printf("hi")之后忘了分号。(您还忘记了#include <stdio.h>,也可能是hi之后的\n,但是这些不会给您带来编译错误。)

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

https://stackoverflow.com/questions/28167356

复制
相关文章

相似问题

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