[OpenWrt-Devel] python ctypes.util.find_library cannot find libc

郭涛 guotao945 at gmail.com
Wed Jan 18 03:32:46 EST 2017


Hi Andrew & Alexandru

Forget the patch in prev mail, use attached patch instead.

To use ctypes.util.find_library, you need one of gcc, ldconfig or
objdump. I suggest you use ldconfig

After install ldconfig,  run ldconfig first to update cache
then run ldconfig -p to show all of your libraries
in my case, it shows:

195 libs found in cache `/etc/ld.so.cache' (version 1.7.0)
        uhttpd_tls.so (libc0) => /usr/lib/uhttpd_tls.so
        rclibrary.so (libc0) => /usr/lib/rclibrary.so
        libz.so.1 (libc0) => /usr/lib/libz.so.1
        libz.so (libc0) => /usr/lib/libz.so
        libyaml-0.so.2 (libc0) => /usr/lib/libyaml-0.so.2
        ......

All libraries are libc0, that's why ctypes.util.find_library does not
work on my platform

You need to run 'uname -m' to get your matchine name and run 'ldconfig
-p' to get library type.
Atter all, append  '$machine' : '$type'  to  mach_map list in
ctypes/util.py and try find_library('pthread')


>>> from ctypes.util import find_library
>>>
>>> find_library('pthread')
'libpthread.so.0'






2017-01-17 22:22 GMT+08:00 Alexandru Ardelean <ardeleanalex at gmail.com>:
> Will give it a try.
>
> On Mon, Jan 16, 2017 at 9:41 PM, Andrew McConachie <andrew at depht.com> wrote:
>> Hi Alexandru and 郭涛,
>>
>> Attached is the Makefile I made for python-iptables. I can work around this
>> by hardwiring library locations in the source of python-iptables, but I'd
>> rather do it the correct way. To reproduce this build an OpenWrt system with
>> this Makefile and then just create a simple Python script with 'import
>> iptc'.
>>
>> I am cloning OpenWrt from Github and running make menuconfig;make to build
>> everything. My Github version is about 6 days old with the last commit at
>> 5ba298c.
>>
>> I also found that /proc/sys/kernel/modprobe contains /sbin/modprobe, while
>> the modprobe binary is at /usr/sbin/modprobe. According to the Debian man
>> page on proc(5), /proc/sys/kernel/modprobe should point to the modprobe
>> binary. Googling about seems also to suggest that this file should contain
>> the location of the modprobe binary. So I would say this is also a bug.
>>
>> Thanks!
>> --Andrew
>>
>>
>> On 1/16/17 07:23, Alexandru Ardelean wrote:
>>>
>>> Hey Andrew & 郭涛
>>>
>>> Sorry I did not answer sooner.
>>>
>>> @Andrew: do you have a Makefile for the python-iptables packages ?
>>> I'd like to try to build it and see the issue. Or, are you just using
>>> that .py file ?
>>> Can you give a bit more input on which Python version you're using,
>>> and which OpenWrt version?
>>>
>>> If the issue is still present in the current packages trunk, I'd like to
>>> fix it.
>>> And if  郭涛's fix works, we can apply it to trunk.
>>>
>>> Thanks
>>> Alex
>>>
>>>
>>> On Mon, Jan 16, 2017 at 6:23 AM, 郭涛 <guotao945 at gmail.com> wrote:
>>>>
>>>> I also meet this issue.
>>>> I fixed it using below change
>>>>
>>>>
>>>> https://github.com/gt945/Netgear-D7800-Openwrt-Packages/commit/fab71ca0ebf36d5f7b495b96f14d459e794b7224
>>>>
>>>>
>>>> 2017-01-13 0:43 GMT+08:00 Andrew McConachie <andrew at depht.com>:
>>>>>
>>>>> Hi OpenWRT Devs,
>>>>>
>>>>> I'm building an OpenWRT package for python-iptables for a project I'm
>>>>> working on and getting this error message when attempting to use it.
>>>>>
>>>>>      import iptc
>>>>>    File "/usr/lib/python2.7/site-packages/iptc/__init__.py", line 10, in
>>>>> <module>
>>>>>      from ip4tc import (is_table_available, Table, Chain, Rule, Match,
>>>>> Target,
>>>>>    File "/usr/lib/python2.7/site-packages/iptc/ip4tc.py", line 13, in
>>>>> <module>
>>>>>      from xtables import (XT_INV_PROTO, NFPROTO_IPV4, XTablesError,
>>>>> xtables,
>>>>>    File "/usr/lib/python2.7/site-packages/iptc/xtables.py", line 677, in
>>>>> <module>
>>>>>      _optind = ct.c_long.in_dll(_libc, "optind")
>>>>> AttributeError: 'NoneType' object has no attribute '_handle'
>>>>>
>>>>> You can view xtables.py here if you're curious.
>>>>> https://github.com/ldx/python-iptables/blob/master/iptc/xtables.py
>>>>>
>>>>> The problem is that my python-iptables package cannot find libc
>>>>> functions
>>>>> using ctypes.util.find_library(). I've tried building OpenWRT using both
>>>>> musl and eglibc but neither work. I've also tried building OpenWRT with
>>>>> objdump and ldconfig. When I include ldconfig via 'make menuconfig' it
>>>>> doesn't actually populate my OpenWRT image with an ldconfig binary.
>>>>> Maybe
>>>>> this is the problem?
>>>>>
>>>>> This bug report looks similar to my problem, but it's about MIPS and
>>>>> marked
>>>>> as closed.
>>>>> https://dev.openwrt.org/ticket/20123
>>>>>
>>>>> Any help or pointers would be much appreciated.
>>>>>
>>>>> Thanks,
>>>>> Andrew
>>>>> _______________________________________________
>>>>> openwrt-devel mailing list
>>>>> openwrt-devel at lists.openwrt.org
>>>>> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
>>>>
>>>> _______________________________________________
>>>> openwrt-devel mailing list
>>>> openwrt-devel at lists.openwrt.org
>>>> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
>>
>>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 012-fix-find-library.patch
Type: text/x-patch
Size: 343 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/openwrt-devel/attachments/20170118/614fd5b8/attachment.bin>
-------------- next part --------------
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list