[Pljava-dev] difficulty loading library libpljava.so

Thomas Hallgren thhal at mailblocks.com
Sun May 1 08:11:32 UTC 2005


Vince Clark wrote:

> I am trying to install pljava1.1.0. Running Postgres 8.0.2 on SuSE 9.2
>
> I consistently receive the following error:
> ERROR:  could not load library 
> "/var/lib/pgsql/pljava-1.1.0/build/objs/libpljava.so": 
> /var/lib/pgsql/pljava-1.1.0/build/objs/libpljava.so: cannot open 
> shared object file: No such file or directory
> java.sql.SQLException: ERROR: could not load library 
> "/var/lib/pgsql/pljava-1.1.0/build/objs/libpljava.so": 
> /var/lib/pgsql/pljava-1.1.0/build/objs/libpljava.so: cannot open 
> shared object file: No such file or directory
>         at 
> org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1471)
>         at 
> org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1256)
>         at 
> org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:175)
>         at 
> org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:389)
>         at 
> org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:314)
>         at 
> org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:306)
>         at 
> org.postgresql.pljava.deploy.Deployer.initJavaHandlers(Deployer.java:419)
>         at org.postgresql.pljava.deploy.Deployer.main(Deployer.java:275)
>
> Here is the value for dynamic_library_path in pogresql.conf file:
> dynamic_library_path = 
> '/var/lib/pgsql/pljava-1.1.0/build/objs/:/usr/lib/jvm/java-1.4.2-sun-1.4.2.06/jre/lib/i386/client/'
>
> And LD_LIBRARY_PATH is set to:
> /var/lib/pgsql/pljava-1.1.0/build/objs/:/usr/lib/jvm/java-1.4.2-sun-1.4.2.06/jre/lib/i386/client/
>
> I have restarted Postgres.

My guess is that your dynamic_library_path should look like this:

dynamic_library_path = '$libdir:/var/lib/pgsql/pljava-1.1.0/build/objs'

and you LD_LIBRARY_PATH like this:

/usr/lib/jvm/java-1.4.2-sun-1.4.2.06/jre/lib/i386/client:/usr/lib/jvm/java-1.4.2-sun-1.4.2.06/jre/lib/i386

Java uses two directories. You had the jre/lib/i386/client correct. The 
directory above 'client' must be included also.

The dynamic_library_path is used by PostgreSQL to find modules but this 
setting will not have any effect on the library loader, and vice versa. 
What normally happens when a module is loaded is:

1. PostgreSQL constructs absolute paths based on the 
dynamic_library_path setting. It attempts those paths in succession 
until the module can be found.
2. For most modules #1 is enough. Some modules, like PL/Java needs other 
shared objects and the OS library loader will load them automatically. 
The library loader uses LD_LIBRARY_PATH and has no access to the 
dynamic_library_path.

I hope this helps.

Regards,
Thomas Hallgren


> -- 
> Vince Clark
> Global Era
> The freedom of open source.
> (303) 433-4221 ext. 201
> (303) 455-2409 fax
> vclark at globalera.com <mailto:vclark at globalera.com>
> www.globalera.com
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Pljava-dev mailing list
>Pljava-dev at gborg.postgresql.org
>http://gborg.postgresql.org/mailman/listinfo/pljava-dev
>  
>




More information about the Pljava-dev mailing list