Compiling problem on Solaris

Started by SAKAI Kiyotakaover 19 years ago3 messagesbugs
Jump to latest
#1SAKAI Kiyotaka
ksakai@isr.co.jp

I compiled PostgreSQL-8.2.0 on Solaris 8, but I cannot execute
binaries because it cannot find linked shared libraries, like
libgcc_s.so.

% cd src/interfaces/libp
% rm libpq.so*
% make
gcc -shared -h libpq.so.5 fe-auth.o fe-connect.o fe-exec.o fe-misc.o fe-print.o fe-lobj.o fe-protocol2.o fe-protocol3.o pqexpbuffer.o pqsignal.o fe-secure.o md5.o ip.o wchar.o encnames.o noblock.o pgstrcasecmp.o thread.o inet_aton.o strlcpy.o getaddrinfo.o -L../../../src/port -lsocket -lnsl -Wl,-R'/usr/local/pgsql/lib' -o libpq.so.5.0
rm -f libpq.so.5
ln -s libpq.so.5.0 libpq.so.5
rm -f libpq.so
ln -s libpq.so.5.0 libpq.so
% ldd libpq.so
libsocket.so.1 => /usr/lib/libsocket.so.1
libnsl.so.1 => /usr/lib/libnsl.so.1
libgcc_s.so.1 => (file not found)
libc.so.1 => /usr/lib/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1
libmp.so.2 => /usr/lib/libmp.so.2
/usr/platform/SUNW,Sun-Blade-100/lib/libc_psr.so.1

I think the following patch is needed, so that LD_RUN_PATH is also
passed to -R option.

*** src/makefiles/Makefile.solaris.old	Sat Dec 10 06:19:36 2005
--- src/makefiles/Makefile.solaris	Thu Dec  7 14:03:43 2006
***************
*** 4,12 ****

ifeq ($(with_gnu_ld), yes)
export_dynamic = -Wl,-E
! rpath = -Wl,-rpath,'$(rpathdir)'
else
! rpath = -Wl,-R'$(rpathdir)'
endif

  DLSUFFIX = .so
--- 4,12 ----

ifeq ($(with_gnu_ld), yes)
export_dynamic = -Wl,-E
! rpath = -Wl,-rpath,'$(rpathdir):$(LD_RUN_PATH)'
else
! rpath = -Wl,-R'$(rpathdir):$(LD_RUN_PATH)'
endif

DLSUFFIX = .so

#2Zdenek Kotala
Zdenek.Kotala@Sun.COM
In reply to: SAKAI Kiyotaka (#1)
Re: Compiling problem on Solaris

SAKAI Kiyotaka wrote:

I compiled PostgreSQL-8.2.0 on Solaris 8, but I cannot execute
binaries because it cannot find linked shared libraries, like
libgcc_s.so.

% cd src/interfaces/libp
% rm libpq.so*
% make
gcc -shared -h libpq.so.5 fe-auth.o fe-connect.o fe-exec.o fe-misc.o fe-print.o fe-lobj.o fe-protocol2.o fe-protocol3.o pqexpbuffer.o pqsignal.o fe-secure.o md5.o ip.o wchar.o encnames.o noblock.o pgstrcasecmp.o thread.o inet_aton.o strlcpy.o getaddrinfo.o -L../../../src/port -lsocket -lnsl -Wl,-R'/usr/local/pgsql/lib' -o libpq.so.5.0
rm -f libpq.so.5
ln -s libpq.so.5.0 libpq.so.5
rm -f libpq.so
ln -s libpq.so.5.0 libpq.so
% ldd libpq.so
libsocket.so.1 => /usr/lib/libsocket.so.1
libnsl.so.1 => /usr/lib/libnsl.so.1
libgcc_s.so.1 => (file not found)
libc.so.1 => /usr/lib/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1
libmp.so.2 => /usr/lib/libmp.so.2
/usr/platform/SUNW,Sun-Blade-100/lib/libc_psr.so.1

Gcc compiler is not part of Solaris 8. You can use LD_LIBRARY_PATH in
runtime or LDFLAGS for ./configure setup. I guess, that your suggested
patch could be generate unexpected result for other people.

By the way, sun studio compiler is significantly better on SPARC cpu
than gcc. You can download it from sun webpage. Also if you can upgrade
OS than Solaris 10 is faster and you can use DTrace probes in postgres.

Zdenek

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: SAKAI Kiyotaka (#1)
Re: Compiling problem on Solaris

SAKAI Kiyotaka <ksakai@isr.co.jp> writes:

I think the following patch is needed, so that LD_RUN_PATH is also
passed to -R option.

Hmm ... this puts the build-time LD_RUN_PATH into the executables, which
doesn't seem very appropriate --- rpathdir is the correct thing IMHO.
Also, what happens if LD_RUN_PATH isn't set at all ... don't you end up
with incorrect syntax for the rpath option?

regards, tom lane