This forum has been archived. All content is frozen. Please use KDE Discuss instead.

[SOLVED] Don't use default la for libtool to load dynamic libraries

Tags: None
(comma "," separated)
yueche
Registered Member
Posts
7
Karma
0
Hi All

I have an old KDE3.3 installed on my machine. Now I want to install a new KDE3.5(Not upgrade the old one) to use its KPDF 0.5. I was able to build the new KDE successfully and installed it under /opt/kde.

My problem is when I execute /opt/kde/bin/kpdf (0.5), it will automatically look for /usr/lib/kde3/libkpdfpart.la (provided by KDE3.3) rather than /opt/kde/lib/kde3/libkpdfpart.la. The consequence is that the ui of KPDF0.5 is in old KPDF 0.3 style.

My workaournd is to copy libkpdfpart.so and libkpdfpart.la into /.kde/lib/kde3. But it is not wise since if anyone wants to use it, he/she has to do this redundant job.

Is any way to solve this? Or did I miss any parameter in terms of building KDE3.5?
User avatar
bcooksley
Administrator
Posts
19765
Karma
87
OS
You probably need to add the following global environment variable if not already present:
Code: Select all
export LD_LIBRARY_PATH=/path/to/kde/3.5/install:$LD_LIBRARY_PATH


KDE Sysadmin
[img]content/bcooksley_sig.png[/img]
yueche
Registered Member
Posts
7
Karma
0
HI Bcooksly

Actually, I have tried "export LD_LIBRARY_PATH=/opt/kde/lib/kde3", but it does not look. From the strace output, my kpdf still prefers the default location to open libkpdfpart.la.

I think this is because /usr/lib/kde3 is prior than /opt/kde/lib/kde3 in certain library list.

==============================================================
munmap(0xb7d96000, 32768) = 0
lstat64("/users", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat64("/users/yueche", {st_mode=S_IFDIR|0700, st_size=32768, ...}) = 0
lstat64("/users/yueche/.kde", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
lstat64("/users/yueche/.kde/lib", 0xbfe893ac) = -1 ENOENT (No such file or directory)
lstat64("/usr", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/usr/lib", {st_mode=S_IFDIR|0755, st_size=77824, ...}) = 0
lstat64("/usr/lib/kde3", {st_mode=S_IFDIR|0755, st_size=49152, ...}) = 0
access("/usr/lib/kde3", F_OK) = 0
lstat64("/usr/lib/kde3", {st_mode=S_IFDIR|0755, st_size=49152, ...}) = 0
lstat64("/opt", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
lstat64("/opt/kde", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/opt/kde/lib", {st_mode=S_IFDIR|0755, st_size=16384, ...}) = 0
lstat64("/opt/kde/lib/kde3", {st_mode=S_IFDIR|0755, st_size=20480, ...}) = 0
access("/opt/kde/lib/kde3", F_OK) = 0
lstat64("/opt/kde/lib/kde3", {st_mode=S_IFDIR|0755, st_size=20480, ...}) = 0
access("/users/yueche/.kde/lib/kde3/libkpdfpart.la", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/kde3/libkpdfpart.la", R_OK) = 0
stat64("/usr/lib/kde3/libkpdfpart.la", {st_mode=S_IFREG|0755, st_size=1217, ...}) = 0
open("/usr/lib/kde3/libkpdfpart.la", O_RDONLY) = 9
fstat64(9, {st_mode=S_IFREG|0755, st_size=1217, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7d9d000
read(9, "# libkpdfpart.la - a libtool lib"..., 4096) = 1217
......
User avatar
bcooksley
Administrator
Posts
19765
Karma
87
OS
Can you post the output of "ldd kpdf" both before and after setting LD_LIBRARY_PATH?
LD_LIBRARY_PATH should be set to $KDEDIR/lib ( where KDEDIR is /opt/kde for you )
Also, if you haven't set $PATH to include $KDEDIR/bin/ please do.

Code: Select all
export PATH=$KDEDIR/bin/:$PATH
export LD_LIBRARY_PATH=$KDEDIR/lib/:$LD_LIBRARY_PATH


KDE Sysadmin
[img]content/bcooksley_sig.png[/img]
yueche
Registered Member
Posts
7
Karma
0
bcooksley wrote:Can you post the output of "ldd kpdf" both before and after setting LD_LIBRARY_PATH?
LD_LIBRARY_PATH should be set to $KDEDIR/lib ( where KDEDIR is /opt/kde for you )
Also, if you haven't set $PATH to include $KDEDIR/bin/ please do.

Code: Select all
export PATH=$KDEDIR/bin/:$PATH
export LD_LIBRARY_PATH=$KDEDIR/lib/:$LD_LIBRARY_PATH



Hi bcooksly

Here is the output. You see the output does not change before/after setting LD_LIBRARY_PATH and does not contains libkpdfpart.so.

After reading the code, I found libkpdfpart.so should be loaded through code as following.
Code: Select all
 KParts::Factory *factory = (KParts::Factory *) KLibLoader::self()->factory("libkpdfpart");


I will dig deeper into KLibLoader class to figure out how its load order works and update this thread.

Code: Select all
[yueche@sha-vde-dev6][/auto/fish-app/yueche]
$echo $LD_LIBRARY_PATH

[yueche@sha-vde-dev6][/auto/fish-app/yueche]
$ldd /opt/kde/bin/kpdf
        libkparts.so.2 => /opt/kde/lib/libkparts.so.2 (0x004d0000)
        libkio.so.4 => /opt/kde/lib/libkio.so.4 (0x00111000)
        libkdeui.so.4 => /opt/kde/lib/libkdeui.so.4 (0x00513000)
        libkdesu.so.4 => /opt/kde/lib/libkdesu.so.4 (0x00431000)
        libkwalletclient.so.1 => /opt/kde/lib/libkwalletclient.so.1 (0x0044a000)
        libkdecore.so.4 => /opt/kde/lib/libkdecore.so.4 (0x007c9000)
        libDCOP.so.4 => /opt/kde/lib/libDCOP.so.4 (0x0045a000)
        libresolv.so.2 => /lib/libresolv.so.2 (0x00dc0000)
        libutil.so.1 => /lib/libutil.so.1 (0x0048b000)
        libart_lgpl_2.so.2 => /opt/kde/lib/libart_lgpl_2.so.2 (0x0048f000)
        libidn.so.11 => /usr/lib/libidn.so.11 (0x00a3a000)
        libkdefx.so.4 => /opt/kde/lib/libkdefx.so.4 (0x004a4000)
        libqt-mt.so.3 => /opt/kde/lib/libqt-mt.so.3 (0x00dd3000)
        libGL.so.1 => /usr/X11R6/lib/libGL.so.1 (0x00a6a000)
        libXmu.so.6 => /usr/X11R6/lib/libXmu.so.6 (0x009fa000)
        libXrandr.so.2 => /usr/X11R6/lib/libXrandr.so.2 (0x00db0000)
        libXcursor.so.1 => /usr/X11R6/lib/libXcursor.so.1 (0x00db5000)
        libXinerama.so.1 => /usr/X11R6/lib/libXinerama.so.1 (0x00d44000)
        libXft.so.2 => /usr/X11R6/lib/libXft.so.2 (0x00d6a000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00cd7000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00d7e000)
        libdl.so.2 => /lib/libdl.so.2 (0x004cc000)
        libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x00a0f000)
        libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x00bb6000)
        libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x00ad8000)
        libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x00cbd000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00ca9000)
        libXrender.so.1 => /usr/X11R6/lib/libXrender.so.1 (0x00da6000)
        libz.so.1 => /usr/lib/libz.so.1 (0x00c97000)
        libacl.so.1 => /lib/libacl.so.1 (0x00ae1000)
        libattr.so.1 => /lib/libattr.so.1 (0x00a1d000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00ae7000)
        libm.so.6 => /lib/tls/libm.so.6 (0x00d47000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x071c0000)
        libc.so.6 => /lib/tls/libc.so.6 (0x015f7000)
        libXxf86vm.so.1 => /usr/X11R6/lib/libXxf86vm.so.1 (0x04bfd000)
        libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0x04c95000)
        libexpat.so.0 => /usr/lib/libexpat.so.0 (0x04c31000)
        /lib/ld-linux.so.2 (0x00a22000)

[yueche@sha-vde-dev6][/auto/fish-app/yueche]
$ export LD_LIBRARY_PATH=/opt/kde/lib

[yueche@sha-vde-dev6][/auto/fish-app/yueche]
$ldd /opt/kde/bin/kpdf
        libkparts.so.2 => /opt/kde/lib/libkparts.so.2 (0x00940000)
        libkio.so.4 => /opt/kde/lib/libkio.so.4 (0x003ab000)
        libkdeui.so.4 => /opt/kde/lib/libkdeui.so.4 (0x00a3a000)
        libkdesu.so.4 => /opt/kde/lib/libkdesu.so.4 (0x008bd000)
        libkwalletclient.so.1 => /opt/kde/lib/libkwalletclient.so.1 (0x00836000)
        libkdecore.so.4 => /opt/kde/lib/libkdecore.so.4 (0x00111000)
        libDCOP.so.4 => /opt/kde/lib/libDCOP.so.4 (0x00995000)
        libresolv.so.2 => /lib/libresolv.so.2 (0x00dc0000)
        libutil.so.1 => /lib/libutil.so.1 (0x0070e000)
        libart_lgpl_2.so.2 => /opt/kde/lib/libart_lgpl_2.so.2 (0x00342000)
        libidn.so.11 => /usr/lib/libidn.so.11 (0x00357000)
        libkdefx.so.4 => /opt/kde/lib/libkdefx.so.4 (0x00ed6000)
        libqt-mt.so.3 => /opt/kde/lib/libqt-mt.so.3 (0x00efe000)
        libGL.so.1 => /usr/X11R6/lib/libGL.so.1 (0x00712000)
        libXmu.so.6 => /usr/X11R6/lib/libXmu.so.6 (0x00387000)
        libXrandr.so.2 => /usr/X11R6/lib/libXrandr.so.2 (0x00db0000)
        libXcursor.so.1 => /usr/X11R6/lib/libXcursor.so.1 (0x00db5000)
        libXinerama.so.1 => /usr/X11R6/lib/libXinerama.so.1 (0x00d44000)
        libXft.so.2 => /usr/X11R6/lib/libXft.so.2 (0x00d6a000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00780000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00d7e000)
        libdl.so.2 => /lib/libdl.so.2 (0x0039c000)
        libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x006cb000)
        libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x00dd3000)
        libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x003a0000)
        libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x006d9000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x006f1000)
        libXrender.so.1 => /usr/X11R6/lib/libXrender.so.1 (0x00da6000)
        libz.so.1 => /usr/lib/libz.so.1 (0x007eb000)
        libacl.so.1 => /lib/libacl.so.1 (0x00703000)
        libattr.so.1 => /lib/libattr.so.1 (0x00709000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x03d31000)
        libm.so.6 => /lib/tls/libm.so.6 (0x007fb000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0081e000)
        libc.so.6 => /lib/tls/libc.so.6 (0x040fb000)
        libXxf86vm.so.1 => /usr/X11R6/lib/libXxf86vm.so.1 (0x00828000)
        libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0x00846000)
        libexpat.so.0 => /usr/lib/libexpat.so.0 (0x00d49000)
        /lib/ld-linux.so.2 (0x00a22000)

Last edited by yueche on Fri May 15, 2009 10:07 am, edited 1 time in total.
User avatar
bcooksley
Administrator
Posts
19765
Karma
87
OS
Have you set the environment variable $KDEDIR to point to /opt/kde/?


KDE Sysadmin
[img]content/bcooksley_sig.png[/img]
yueche
Registered Member
Posts
7
Karma
0
Hi bcooksley

It works after setting $KDEDIR according to your advice.
Thank you for the support.


Bookmarks



Who is online

Registered users: bartoloni, Bing [Bot], Evergrowing, Google [Bot], q.ignora, watchstar