subversion hardcoded to look for libserf-1.so.1 when a newer libserf is available

571 views
Skip to first unread message

bzb.dev001

unread,
Dec 5, 2013, 3:24:02 PM12/5/13
to us...@subversion.apache.org
I'm compiling subversion-1.8.5 from source with the following supporting
projects. The system is a linux box running Lubuntu 12.04 64bit.

subversion-1.8.5
serf-1.3.2
apache-apr-1.5.0
apache-apr-util-1.5.3


After compiling from source, when run 'svn', the following error occurs.

$ /usr/local/bin/subversion-1.8.5/bin/svn
/usr/local/bin/subversion-1.8.5/bin/svn: error while loading shared
libraries: libserf-1.so.1: cannot open shared object file: No such file
or directory


I know that serf had been compiled and it's location was given as a
parameter to the subversion 'configure' app. I do not know why it
insists on finding libserf-1.so.1 when libserf-1.so.1.3.0 was compiled.

Any help is greatly appreciated.
Thanks in advance.



How to reproduce the issue:

o) compile apache-apr-1.5.0

./configure --prefix=/usr/local/bin/apache-apr-1.5.0
make; make test
sudo make install

o) compile apache-apr-util-1.5.3

./configure --prefix=/usr/local/bin/apache-apr-util-1.5.3
--with-apr=/usr/local/bin/apache-apr-1.5.0
make; make test
sudo make install

o) compile serf-1.3.2

$ scons APR=/usr/local/bin/apache-apr-1.5.0
APU=/usr/local/bin/apache-apr-util-1.5.3
$ sudo scons install

Details of the output are here: http://pastebin.ca/2492961

The resulting serf headers and libraries are installed here:

/usr/local/lib/libserf-1.a
/usr/local/lib/libserf-1.so.1.3.0
/usr/local/include/serf-1/serf.h
/usr/local/include/serf-1/serf_bucket_types.h
/usr/local/include/serf-1/serf_bucket_util.h
/usr/local/lib/pkgconfig/serf-1.pc

o) compile subversion-1.8.5

$ ./configure --prefix=/usr/local/bin/subversion-1.8.5
--with-apxs=/usr/local/bin/apache-httpd-2.4.7/bin/apxs --with-jdk
--enable-javahl --enable-mod-activation --enable-shared --with-openssl
--with-serf=/usr/local
-output of the config.log is here: http://pastebin.ca/2492975
$ make
-output of the make is here: http://pastebin.ca/2492985
$ sudo make install


After a successful compile and install of all projects.

$ /usr/local/bin/subversion-1.8.5/bin/svn
/usr/local/bin/subversion-1.8.5/bin/svn: error while loading shared
libraries: libserf-1.so.1: cannot open shared object file: No such file
or directory



Philip Martin

unread,
Dec 5, 2013, 4:06:18 PM12/5/13
to bzb.dev001, us...@subversion.apache.org
"bzb.dev001" <bzb.d...@gmail.com> writes:

> o) compile serf-1.3.2
>
> $ scons APR=/usr/local/bin/apache-apr-1.5.0 APU=/usr/local/bin/apache-apr-util-1.5.3
> $ sudo scons install
>
> Details of the output are here: http://pastebin.ca/2492961
>
> The resulting serf headers and libraries are installed here:
>
> /usr/local/lib/libserf-1.a
> /usr/local/lib/libserf-1.so.1.3.0
> /usr/local/include/serf-1/serf.h
> /usr/local/include/serf-1/serf_bucket_types.h
> /usr/local/include/serf-1/serf_bucket_util.h
> /usr/local/lib/pkgconfig/serf-1.pc

That looks like a serf problem, there should be symlinks

libserf-1.so -> libserf-1.so.1.3.0
libserf-1.so.1 -> libserf-1.so.1.3.0

--
Philip Martin | Subversion Committer
WANdisco // *Non-Stop Data*

bzb.dev001

unread,
Dec 5, 2013, 5:15:07 PM12/5/13
to Philip Martin, us...@subversion.apache.org
The serf installation does contain your specified symlinks. This is what
I have in my directory listing at /usr/local/lib. Since there is not
problem with the permissions. That means that subversion is looking
elsewhere for libserf-1.so.1

# l
total 1.3M
drwxr-xr-x 2 root root 4.0K Dec 5 14:05 pkgconfig/
drwxrwsr-x 4 root staff 4.0K Oct 2 12:07 python2.7/
drwxr-xr-x 3 root root 4.0K Dec 5 09:54 scons-2.3.0/
drwxr-xr-x 3 root root 4.0K Nov 28 02:02 site_ruby/
-rw-r--r-- 1 root root 803K Dec 5 14:04 libserf-1.a
lrwxrwxrwx 1 root root 18 Dec 5 14:05 libserf-1.so ->
libserf-1.so.1.3.0*
lrwxrwxrwx 1 root root 18 Dec 5 14:05 libserf-1.so.1 ->
libserf-1.so.1.3.0*
-rwxr-xr-x 1 root root 451K Dec 5 14:05 libserf-1.so.1.3.0*



Philip Martin

unread,
Dec 5, 2013, 6:11:06 PM12/5/13
to bzb.dev001, us...@subversion.apache.org
"bzb.dev001" <bzb.d...@gmail.com> writes:

> Since there is not problem with the permissions. That means that
> subversion is looking elsewhere for libserf-1.so.1

The serf dependency is part of libsvn_ra_serf, you can see it using

$ objdump -x libsvn_ra_serf-1.so | grep NEEDED.*serf
NEEDED libserf-1.so.1

The tarball libtool might also add that dependency to the svn
executable.

You can see the RPATH in svn or libsvn_ra_serf-1.so using

$ objdump -x svn | grep RPATH
RPATH /usr/local/serf/lib:/usr/local/subversion/lib

You can see the search as carried out by the linker using

$ LD_DEBUG=libs svn 2>&1 | grep -A1 libserf
19995: find library=libserf-1.so.1 [0]; searching
19995: search path=/usr/local/subversion/lib:/usr/local/serf/lib (RPATH from file svn)
19995: trying file=/usr/local/subversion/lib/libserf-1.so.1
19995: trying file=/usr/local/serf/lib/libserf-1.so.1

I see I had to add an extra RPATH to svn and libsvn_ra_serf by
configuring Subversion with

./configure LDFLAGS=-Wl,-rpath,/usr/local/serf/lib

but I install serf in an non-standard place.
Reply all
Reply to author
Forward
0 new messages