Thread: Compiling problem on Solaris
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.opqexpbuffer.o pqsignal.o fe-secure.o md5.o ip.o wchar.o encnames.o noblock.o pgstrcasecmp.o thread.o inet_aton.ostrlcpy.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
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.opqexpbuffer.o pqsignal.o fe-secure.o md5.o ip.o wchar.o encnames.o noblock.o pgstrcasecmp.o thread.o inet_aton.ostrlcpy.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
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