When calling ffi.verify("#include <string.h>") in a Python project, cffi threw the following exception:
/workspace/cle/tests/test_clemory.py(22)test_cclemory()
20 int memcmp(const void* s1, const void* s2, size_t n);
21 """)
---> 22 c = ffi.verify("""
23 #include <string.h>
24 """)
/workspace/angr-venv/lib/python3.14/site-packages/cffi/api.py(468)verify()
466 # Make a Verifier() and use it to load the library.
467 self.verifier = Verifier(self, source, tmpdir, **kwargs)
--> 468 lib = self.verifier.load_library()
469 #
470 # Save the loaded library for keep-alive purposes, even
/workspace/angr-venv/lib/python3.14/site-packages/cffi/verifier.py(105)load_library()
103 if not self._has_source:
104 self._write_source()
--> 105 self._compile_module()
106 return self._load_library()
107
/workspace/angr-venv/lib/python3.14/site-packages/cffi/verifier.py(201)_compile_module()
199 # compile this C source
200 tmpdir = os.path.dirname(self.sourcefilename)
--> 201 outputfilename = ffiplatform.compile(tmpdir, self.get_extension())
202 try:
203 same = ffiplatform.samefile(outputfilename, self.modulefilename)
/workspace/angr-venv/lib/python3.14/site-packages/cffi/ffiplatform.py(20)compile()
18 saved_environ = os.environ.copy()
19 try:
---> 20 outputfilename = _build(tmpdir, ext, compiler_verbose, debug)
21 outputfilename = os.path.abspath(outputfilename)
22 finally:
> /workspace/angr-venv/lib/python3.14/site-packages/cffi/ffiplatform.py(50)_build()
48 dist.run_command('build_ext')
49 cmd_obj = dist.get_command_obj('build_ext')
---> 50 [soname] = cmd_obj.get_outputs()
51 finally:
52 set_threshold(old_level)
cmd_obj.get_outputs() returns:
ipdb> pp cmd_obj.get_outputs()
['/workspace/cle/tests/__pycache__/_cffi__x4038f167x5672c41f.cpython-314-x86_64-linux-gnu.so',
'/workspace/cle/tests/__pycache__/uefi_firmware/efi_compressor.cpython-314-x86_64-linux-gnu.so']
Looks like this is because I have another native extension in this project, and _build() does not expect other extensions to exist. My local workaround is changing [soname] = cmd_obj.get_outputs() to soname = cmd_obj.get_outputs()[0].
Please let me know if this is a workaround that you are comfortable with, and I can submit a PR if you like!
When calling
ffi.verify("#include <string.h>")in a Python project, cffi threw the following exception:cmd_obj.get_outputs()returns:Looks like this is because I have another native extension in this project, and
_build()does not expect other extensions to exist. My local workaround is changing[soname] = cmd_obj.get_outputs()tosoname = cmd_obj.get_outputs()[0].Please let me know if this is a workaround that you are comfortable with, and I can submit a PR if you like!