You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ctypes.util incorrectly fails for libraries without DT_SONAME #65821
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=Nonecreated_at=<Date2014-06-01.03:28:22.092>labels= ['ctypes', 'type-bug']
title='ctypes.util incorrectly fails for libraries without DT_SONAME'updated_at=<Date2020-04-20.08:40:25.315>user='https://bugs.python.org/JeremyHuntwork'
The function seems to jump through some hoops which may not be necessary. Is there a reason for wanting particularly to use the SONAME entry for the lib?
In my system the following works as a replacement for _get_soname:
On Linux, the find_library() function is documented to return “the filename of the library file”, but in reality it seems it return the soname, and therefore breaks if there is no soname. I do not know why we extract the soname, but it has been that way at least since ctypes was added to Python 2.5.
What do you intend to do with the result of find_library()? See also bpo-9998, especially about searching LD_LIBRARY_PATH. I am struggling to see robust use cases for find_library().
I think it may be reasonable to change the code to return the library file name if no soname can be found.
In the long term, I think always returning the filename rather than soname might be reasonable. Or even returning the full path, which we tried in bpo-21042 (but rolled back because the solution so far is not consistent across platforms).
The PR 10460 ( for 3.8 ) patches the search attempts to leverage LD_LIBRARY_PATH for the Linux case and catches the case after SONAME, gcc and ldconfig behaviors fail.
While this may not be set in all environments ( like the musl based Alpine docker image ) setting the environment variable is within the user's control and when properly set does return found libraries.
PR 10461 and PR 10462 are closed for now, as backports to 2.7 and 3.7 need to have the 3.8 accepted first before being reviewed.
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.
Activity
JeremyHuntwork commentedon Jun 1, 2014
On my system, the C library (musl) intentionally does not include a SONAME entry.
This method in particular fails: http://hg.python.org/cpython/file/076705776bbe/Lib/ctypes/util.py#l133
The function seems to jump through some hoops which may not be necessary. Is there a reason for wanting particularly to use the SONAME entry for the lib?
In my system the following works as a replacement for _get_soname:
KylieMcClain commentedon Apr 25, 2016
This is still a problem on musl distributions as of 2.7.11. Are there any plans to fix this?
Patch used by Alpine Linux:
http://git.alpinelinux.org/cgit/aports/tree/main/python/musl-find_library.patch
vadmium commentedon Apr 25, 2016
On Linux, the find_library() function is documented to return “the filename of the library file”, but in reality it seems it return the soname, and therefore breaks if there is no soname. I do not know why we extract the soname, but it has been that way at least since ctypes was added to Python 2.5.
What do you intend to do with the result of find_library()? See also bpo-9998, especially about searching LD_LIBRARY_PATH. I am struggling to see robust use cases for find_library().
thomwiggers commentedon Sep 4, 2016
This bug is still present in Python 3.5.
It breaks, probably among other things, this package: ahupp/python-magic#114.
vadmium commentedon Sep 5, 2016
I think it may be reasonable to change the code to return the library file name if no soname can be found.
In the long term, I think always returning the filename rather than soname might be reasonable. Or even returning the full path, which we tried in bpo-21042 (but rolled back because the solution so far is not consistent across platforms).
tianon commentedon Jul 16, 2018
This was reported on the Docker image for Python in docker-library/python#111, with the note that it affects the Twisted inotify implementation, so it'd be really neat to see a proper patch in Python (instead of the very musl-/Alpine-assuming patch found in https://github.com/alpinelinux/aports/blob/202f4bea916b0cf974b38ced96ab8fca0b192e3f/main/python2/musl-find_library.patch). <3
jcastillo2nd commentedon Nov 29, 2018
The PR 10460 ( for 3.8 ) patches the search attempts to leverage LD_LIBRARY_PATH for the Linux case and catches the case after SONAME, gcc and ldconfig behaviors fail.
While this may not be set in all environments ( like the musl based Alpine docker image ) setting the environment variable is within the user's control and when properly set does return found libraries.
PR 10461 and PR 10462 are closed for now, as backports to 2.7 and 3.7 need to have the 3.8 accepted first before being reviewed.
ncopa commentedon Apr 20, 2020
I create a PR for this issue.
It would be nice to have it reviewed.
#18380
Thanks!
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.