osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

non-standard glibc location


On 9/7/17, Thomas Jollans <tjol at tjol.eu> wrote:
> On 2017-09-06 16:14, Fetchinson . via Python-list wrote:
>> Hi folks,
>>
>> I'm trying to install a binary package (tensorflow) which contains
>> some binary C extensions. Now my system glibc is 2.15 but the binaries
>> in the C extensions were created (apparently) with glibc 2.17. So I
>> thought no problemo I installed glibc 2.17 to a custom location, built
>> python2.7 from source (hopefully using my custom glibc) and installed
>> pip and everything else using this custom built python. But still when
>> I try to import tensorflow I get:
>>
>> ImportError: /lib64/libc.so.6: version `GLIBC_2.17' not found
>> (required by
>> /home/nogradi/fetch/custom/lib/python2.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)
>>
>> So apparently it's trying to use my system glibc, not the custom one.
>>
>> How do I tell this extension to use the custom glibc? Is it even
>> possible?
>
> It's going to use the same libc as python, so first of all check which
> libc your python interpreter is actually linked to. Maybe your custom
> build didn't do quite what you wanted.
>
> ldd `which python` # or something like that
>
> Once you've convinced yourself that python has the correct libc, you
> could try building tensorflow from source rather than installing the
> binaries.
>
> Maybe something in here helps:
> https://github.com/tensorflow/tensorflow/issues/53

Thanks a lot for all the comments, my problem was indeed that the
compiled python was still using the system glibc. The solution was to
set the environment variables

p=/path/to/custom/glibc
export CFLAGS=-I${p}/include
export LDFLAGS="-Wl,--rpath=${p}/lib
-Wl,--dynamic-linker=${p}/lib/ld-linux-x86-64.so.2"

And then the compiled python was using the new glibc.

Side note 1 on tensorflow: the compiled tensorflow binary uses unicode
ucs4, so for python I had to ./configure --enable-unicode=ucs4 because
the default is ucs2

Side note 2 on tensorflow: it also depends on libstdc++ and my version
was too old for that as well. Instead of compiling gcc from source
(which includes libstdc++) I copied a binary libstdc++ from a newer
linux distro and it was working fine.

And the reason, if anyone cares, I had to go through the above is that
I couldn't compile tensorflow from source.

Thanks again,
Daniel




>
>>
>> But maybe I have an even more basic issue: how do I link python not
>> with the system glibc but with my custom glibc?
>>
>> Cheers,
>> Daniel
>>
>>
>>
>
>
> --
> Thomas Jollans
> --
> https://mail.python.org/mailman/listinfo/python-list
>


-- 
Psss, psss, put it down! - http://www.cafepress.com/putitdown