I have spent the past few days of my life trying to figure out how to get postgis to function properly with a non-standard directory installation of postgres 9.3, but have been unable to resolve the following obnoxious errors:
ERROR: could not load library "/pginstall/postgresql93/lib/postgis-2.1.so": libgeos_c.so.1: cannot open shared object file: No such file or directory ********** Error ********** ERROR: could not load library "/pginstall/postgresql93/lib/postgis-2.1.so": libgeos_c.so.1: cannot open shared object file: No such file or directory SQL state: 58P01
I installed geos,gdal and postgres into contained directories in order to be able to update components without needing to manually find individual files and remove them.
Thus my libraries would be located in the following installation directories:
/pginstall/postgresql93/lib /pginstall/gdal110/lib /pginstall/geos34/lib
All other dependencies are installed using standard apt packages and I am using the standard build-essential package.
I tried setting various environment variables
export LD_LIBRARY_PATH=/pginstall/geos34/lib:/pginstall/gdal110/lib export LDFLAGS="-Wl,-rpath,/pginstall/geos34/lib/,-rpath,/pginstall/postgresql93/lib,-rpath,/pginstall/gdal110/lib" export LDFLAGS="-Wl,-L,/pginstall/geos34/lib,-L,/pginstall/postgresql93/lib,-L,/pginstall/gdal110/lib" export LDFLAGS="-L/pginstall/geos34/lib -Wl,-rpath,/pginstall/geos34/lib" export LDFLAGS="-Wl,-rpath,/pginstall/geos34/lib/,-rpath,/pginstall/gdal110/lib"
But they all failed to work with the configuration below
./configure \ --prefix=/pginstall/postgresql93 \ --with-pgconfig=/pginstall/postgresql93/bin/pg_config \ --with-geosconfig=/pginstall/geos34/bin/geos-config \ --with-gdalconfig=/pginstall/gdal110/bin/gdal-config \ --with-topology \ --with-raster
I did manage to get this woking by adding the LD_LIBRARY_PATH variable to my upstart configuration for postgres --but this is a crude hack and is clearly not suitable for any kind of pre-production or production environment. I don't want to go the ldconfig route either as that requires root access.
I can verify that this issue is that the postgis configure process is ignoring my direct commands to add the paths to the binaries, by running the following command:
chrpath -l /pginstall/postgis/postgis-2.1.0SVN/postgis/postgis-2.1.so
The LDFLAG commands work when compiling GDAL with GEOS and Postgres, so I believe this is a postgis specific issue.
I have no idea what else I can do as I am not a c compiler expert, nor should I need to be to perform this simple task on the OS upon which postgis was developed!
One would assume that postgis should know where the libraries are given that I set them explicitly in the configure step and after concurrently setting LD_LIBRARY_PATH and LD_FLAGS. This is pretty depressing. What more should one need to specify?
Does anyone know of a simple way to fix this issue?
As a side note I am glad I program in Java, as properly building from source in C basically seems to follow the steps below:
1) Hope configure/make/make install just miraculously work
2) Upon inevitable failure, set random environment variables that each have 6.022E^23 contradictory explanations for its function on the internet for each operating system --and are sourced from.
3) Upon inevitable failure, Sacrifice a macbook to the gods of C
4) Consign yourself to your grim fate and download a mostly broken and ridiculously out-of-date package from apt instead.