Hi,
I'm using CentOS 5.2. I wrote a program that uses rtkaio (so my Makefile contains -lrtkaio). The program runs successfully. The problem began when I wanted to create a rpm for my program. I was able to generate a binary rpm, but when I tried to install it, I got the following error:
[root@klab002 tmp]# rpm -i /tmp/mypkg-1.0.x86_64.rpm error: Failed dependencies: libc.so.6(GLIBC_PRIVATE)(64bit) is needed by mypkg-1.0.x86_64.rpm
I checked the dependencies:
[root@klab002 tmp]# rpm -qRp /tmp/mypkg-1.0.x86_64.rpm /bin/bash /bin/sh /bin/sh /bin/sh /usr/bin/python libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_PRIVATE)(64bit) libnickel.so()(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) libpthread.so.0(GLIBC_2.3.2)(64bit) rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rtld(GNU_HASH
The problem is that librtkaio uses GLIBC_PRIVATE:
[root@klab002 tmp]$ nm /lib/rtkaio/librtkaio-2.5.so | grep PRIVATE U __libc_dlopen_mode@@GLIBC_PRIVATE U __libc_dlsym@@GLIBC_PRIVATE U __libc_fatal@@GLIBC_PRIVATE U __libc_pwrite@@GLIBC_PRIVATE w __pthread_clock_gettime@@GLIBC_PRIVATE w __pthread_clock_settime@@GLIBC_PRIVATE U __pthread_unwind@@GLIBC_PRIVATE U _rtld_global@@GLIBC_PRIVATE
But I couldn't find where these symbols are defined (e.g. __libc_pwrite@@GLIBC_PRIVATE).
The workaround that I found is to add the following line to the spec file: "provides: libc.so.6(GLIBC_PRIVATE)(64bit)" I guess that there should be a better solution for that. Any idea?
Thanks, Erez
Erez Zilber wrote:
Hi,
I'm using CentOS 5.2. I wrote a program that uses rtkaio (so my Makefile contains -lrtkaio). The program runs successfully. The problem began when I wanted to create a rpm for my program. I was able to generate a binary rpm, but when I tried to install it, I got the following error:
you have the wrong list, this list is for centos specific issues only, try the general centos list ( http://lists.centos.org )
- KB
On Aug 13, 2008, at 8:00 AM, Erez Zilber wrote:
The workaround that I found is to add the following line to the spec file: "provides: libc.so.6(GLIBC_PRIVATE)(64bit)" I guess that there should be a better solution for that. Any idea?
Adding the Provides: "works", but is likely going to cause pain if/when you distribute your package.
rpmbuild filters GLIBC_PRIVATE Provides: because "You're not supposed to use GLIBC_PRIVATE symbols."
There's a macro to disable the Provides: filtering; see either the glibc.spec file, or examine rpm sources. I'll leave the exercise to you, because you really ought not to use GLIBC_PRIVATE symbols.
73 de Jeff