问题:需要库文件
[root@localhost qq]# rpm -ivh linuxqq.rpm --nodeps
Preparing... ########################################### [100%]
package linuxqq-v1.0-preview3 is already installed
[root@localhost qq]# rpm -ivh linuxqq.rpm
error: Failed dependencies:
libcairo.so.2 is needed by linuxqq-v1.0-preview3.i386
libpangocairo-1.0.so.0 is needed by linuxqq-v1.0-preview3.i386
找到这两个库:
[root@localhost pkgconfig]# find /opt -name libpangocairo-1.0.so.0
/opt/gtk/lib/libpangocairo-1.0.so.0
[root@localhost pkgconfig]# cd /opt/gtk/lib/
[root@localhost lib]# more libpangocairo-1.0.so.0
******** libpangocairo-1.0.so.0: Not a text file ********
[root@localhost lib]# find /opt -name libcairo.so.2
/opt/gtk/lib/libcairo.so.2
[root@localhost lib]# more libcairo.so.2
******** libcairo.so.2: Not a text file ********
路径:
[root@localhost lib]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:
/usr/share/jre/bin:/opt/gtk/bin:/root/bin
系统:
[root@localhost lib]# cat /proc/version
Linux version 2.6.17.1-7 (
[email protected]) (gcc version 3.4.3 20041212 (Asianux 2.0 3.4.3-9.EL4.2)) #1 Tue Sep 5 01:57:04 EDT 2006
[root@localhost lib]# pkg-config --modversion gtk+-2.0
2.13.0
[root@localhost qq]# gcc -v
使用内建 specs。
目标:i386-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-cpu=generic --build=i386-redhat-linux
线程模型:posix
gcc 版本 4.3.2 20081105 (Red Hat 4.3.2-7) (GCC)
[root@localhost Desktop]# rpm -qa |grep gcc
compat-gcc-32-3.2.3-47.3
gcc-objc-3.4.3-9.EL4.2
gcc-java-4.3.2-7
gcc-g77-3.4.3-9.EL4.2
compat-gcc-32-c++-3.2.3-47.3
gcc-c++-4.3.0-8
gcc-4.3.2-7
libgcc-4.3.2-7
gcc-objc-4.3.2-7
[root@localhost Desktop]# rpm -qa |grep glibc
glibc-utils-2.9-2
glibc-headers-2.9-2
glibc-2.9-2
glibc-kernheaders-2.4-9.1.1
glibc-devel-2.9-2
glibc-common-2.9-2
以下摘自:
[url]http://storage.bsc.ustc.edu.cn/LeoBBS/cgi-bin/blog.cgi?no2=12[/url]
现GNOME的东东版本的一致性好难控制,GNOME自己是由很多LIB组合起来
的,这些LIB互相依赖,如果其中一个LIB的版本错了,可能一些程序运行起来很正
常,而还有一些程序就会出问题。
今天在LINUX上装了 pyGTK 和wxPython2.6.2, 他们都是使用GTK的,装好后无
法运行我的程序,报一错误:undefined symbol:
FT_GlyphSlot_Embolden(/usr/lib/
libcairo.so.2),这样的东西见的太多了,通
常就是和库的版本有关。很恶的问题,记得wxPython在2.6.2版本之前装在比较新
的GNOME上就会有这个错误:undefined symbol: pango_x_get_context,只要
wxPython换到版本2.6.2就好了,这个问题曾经困扰了我好久。
先看看使用的SO的情况,用ldd /usr/lib/
libcairo.so.2, 显示:
linux-gate.so.1 => (0xffffe000)
libXrender.so.1 => /usr/X11R6/lib/libXrender.so.1 (0x40075000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x4007d000)
libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x40176000)
libpng12.so.0 => /opt/gd/lib/libpng12.so.0 (0x40184000)
libglitz.so.1 => /usr/lib/libglitz.so.1 (0x401c3000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x401e7000)
libfreetype.so.6 => /opt/gd/lib/libfreetype.so.6 (0x40218000)
libz.so.1 => /lib/libz.so.1 (0x4027d000)
libm.so.6 => /lib/tls/libm.so.6 (0x40290000)
libc.so.6 => /lib/tls/libc.so.6 (0x402b6000)
libdl.so.2 => /lib/libdl.so.2 (0x403d5000)
libexpat.so.0 => /usr/lib/libexpat.so.0 (0x403d9000)
/lib/ld-linux.so.2 (0x80000000)
果然有问题,libfreetype连错了,它用的是 /opt/gd/lib 下的。在/opt/gd/lib
下的是libfreetype.so.6.3.7, 而我的/usr/lib下的是 libfreetype.so.6.3.8,
版本不一样,就出了问题。至于为什么会连到那个so,是因为我的机器上装了一个
软件,它会安装一个gd,并且装到那个目录,还把/opt/gd/lib加到
了/etc/ld.so.conf中去。问题清楚了,去/etc/ld.so.conf中删除/opt/gd/lib
行,用root用户重新执行ldconfig重新配置了库信息就OK了,再次用
ldd /usr/lib/
libcairo.so.2 看到的结果就正常了:
linux-gate.so.1 => (0xffffe000)
libXrender.so.1 => /usr/X11R6/lib/libXrender.so.1 (0x40075000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x4007d000)
libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x40176000)
libpng12.so.0 => /usr/lib/libpng12.so.0 (0x40184000)
libglitz.so.1 => /usr/lib/libglitz.so.1 (0x401c3000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x401e7000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x40218000)
libz.so.1 => /lib/libz.so.1 (0x4027d000)
libm.so.6 => /lib/tls/libm.so.6 (0x40290000)
libc.so.6 => /lib/tls/libc.so.6 (0x402b6000)
libdl.so.2 => /lib/libdl.so.2 (0x403d5000)
libexpat.so.0 => /usr/lib/libexpat.so.0 (0x403d9000)
/lib/ld-linux.so.2 (0x80000000)
其实像这样的问题,在 LINUX 下是经常出现的,而在Windows下是不容易出这样的
问题的。这个可能和两个系统的发展有关,windows下的绝大部分为商业软件,所
以基本上都会使用自己的库,没有什么开源的东西,不会像LINUX上的程序一样,
很多软件都组合了N多的开源东东。 有利也有弊,这个给LINUX系统带来很多不确
定性,造成一些依赖其他库太多的程序的稳定性不够,一是不能控制别人的程序的
质量,再者,版本的一致性问题到现在没有太好的解决办法,这很容易造成混乱。
lumaqq中遇到的问题是要在在/etc/ld.so.conf中删除/usr/X11R6/lib
ldd /usr/lib/
libcairo.so.2
linux-gate.so.1 => (0xffffe000)
libfreetype.so.6 => /home/gao/bin/gv/lib/libfreetype.so.6 (0xb7f28000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7f06000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb7edc000)
libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb7eb9000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb7eb1000)
libX11.so.6 => /usr/lib/libX11.so.6 (0xb7dc5000)
libm.so.6 => /lib/tls/libm.so.6 (0xb7d9e000)
libc.so.6 => /lib/tls/libc.so.6 (0xb7c66000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb7c46000)
libXau.so.6 => /usr/lib/libXau.so.6 (0xb7c43000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb7c3e000)
libdl.so.2 => /lib/tls/libdl.so.2 (0xb7c3a000)
/lib/ld-linux.so.2 (0x80000000)
改正前的
|
ldd /usr/lib/libcairo.so.2 linux-gate.so.1 => (0xffffe000) libfreetype.so.6 => /home/gao/bin/gv/lib/libfreetype.so.6 (0xb7e34000) libz.so.1 => /usr/lib/libz.so.1 (0xb7e12000) libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb7de8000) libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb7dc5000) libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb7dbd000) libX11.so.6 => /usr/lib/libX11.so.6 (0xb7cd1000) libm.so.6 => /lib/tls/libm.so.6 (0xb7caa000) libc.so.6 => /lib/tls/libc.so.6 (0xb7b72000) libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb7b52000) libXau.so.6 => /usr/lib/libXau.so.6 (0xb7b4f000) libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb7b4a000) libdl.so.2 => /lib/tls/libdl.so.2 (0xb7b46000) /lib/ld-linux.so.2 (0x80000000) 改正后的 |