Repository navigation
ctypes.util.find_library raises FileNotFoundError for libsecp256k1 #93094
Copy link
Copy link
Closed as not planned
Closed as not planned
Copy link
Labels
Description
Bug report
The following script
import ctypes
from ctypes import util
print(f'ctypes version {ctypes.__version__}')
print('Test foofoofoo')
print(f"returns: {util.find_library('foofoofoo')}\n")
print('Test secp256k1')
print(f"returns: {util.find_library('secp256k1')}\n")
print('Test libsecp256k1')
print(f"returns: {util.find_library('libsecp256k1')}\n")
gives the output:
ctypes version 1.1.0
Test foofoofoo
returns: None
Test secp256k1
returns: libsecp256k1.so.0
Test libsecp256k1
Traceback (most recent call last):
File "/home/<user>/programs/testctypes.py", line 14, in <module>
print(f"returns: {util.find_library('libsecp256k1')}\n")
File "/home/<user>/programs/anaconda3/envs/python310/lib/python3.10/ctypes/util.py", line 351, in find_library
_get_soname(_findLib_gcc(name)) or _get_soname(_findLib_ld(name))
File "/home/<user>/programs/anaconda3/envs/python310/lib/python3.10/ctypes/util.py", line 148, in _findLib_gcc
if not _is_elf(file):
File "/home/<user>/programs/anaconda3/envs/python310/lib/python3.10/ctypes/util.py", line 100, in _is_elf
with open(filename, 'br') as thefile:
FileNotFoundError: [Errno 2] No such file or directory: b'liblibsecp256k1.a'
find_library should not fail, but return None if nothing was found. In Ubuntu 20.04 this script runs without any exception.
Your environment
- ctypes version 1.1.0
- Operating system and architecture: Kubuntu 22.04 LTS x86_64, linux 5.15.0-27-generic
- Bug can be reproduced in python versions: python 3.10 (via anaconda and via ubuntu deb repositories), python 3.8 (via anaconda)
- The installed
libsecp256k1packages are

/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libsecp256k1.so.0
/usr/lib/x86_64-linux-gnu/libsecp256k1.so.0.0.0
/usr/share
/usr/share/doc
/usr/share/doc/libsecp256k1-0
/usr/share/doc/libsecp256k1-0/changelog.Debian.gz
/usr/share/doc/libsecp256k1-0/copyright
/.
/usr
/usr/include
/usr/include/secp256k1.h
/usr/include/secp256k1_ecdh.h
/usr/include/secp256k1_extrakeys.h
/usr/include/secp256k1_preallocated.h
/usr/include/secp256k1_recovery.h
/usr/include/secp256k1_schnorrsig.h
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libsecp256k1.a
/usr/lib/x86_64-linux-gnu/libsecp256k1.so
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/libsecp256k1.pc
/usr/share
/usr/share/doc
/usr/share/doc/libsecp256k1-dev
/usr/share/doc/libsecp256k1-dev/changelog.Debian.gz
/usr/share/doc/libsecp256k1-dev/copyright
And in /usr/lib/x86_64-linux-gnu/ are the following relevant files containing secp256k1:

This bug was noticed in cryptoadvance/specter-desktop#1710
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
Projects
- StatusShow more project fieldsDone


Activity
relativisticelectron commentedon Jun 1, 2022
When I do a
print(trace)just beforecpython/Lib/ctypes/util.py
Line 139 in 8241a69
I get
here with replaced
\nMy interpretation of this is, that the
relogic incpython/Lib/ctypes/util.py
Line 139 in 8241a69
ldmessage.cz6ace commentedon Oct 12, 2022
I face the same issue, when the output is polluted with message from ld, in my case:
/usr/bin/ld: note to link with /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/libusb-1.0.a use -l:libusb-1.0.a or rename itreproduced with using pyInstaller package, but can be reproduced easily, see below.
Environment:
Ubuntu 22.04 LTS
uname: Linux ubu22-virtual 5.15.0-50-generic #56-Ubuntu SMP Tue Sep 20 13:23:26 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Python: 3.10.6
Steps to reproduce:
outputting
in python3
If the gcc produces only the list of files, then prepending
^as looking for whole line could fix the issue.expr = os.fsencode(r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name))to
expr = os.fsencode(r'^[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name))encukou commentedon Feb 23, 2026
I'm proposing to soft-deprecate
ctypes.util.find_library: https://discuss.python.org/t/106232encukou commentedon Mar 20, 2026
It is now soft-deprecated. It cannot be made to work correctly and consistently on all platforms, and any change runs a chance to break whatever workarounds people already have in place.
I'm prioritizing stability over new features, and encourage solving this outside ctypes itself.