You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by jean-frederic clere <jf...@fujitsu-siemens.com> on 2002/01/14 17:12:29 UTC

jk2 problems with libapr.so

Hi,

I am playing with jk2 and I have noted that the loadNative() in AprImpl fails:
+++
java.lang.UnsatisfiedLinkError:
/home/jakarta/jakarta-tomcat-4.0.1/webapps/jk/WEB-INF/jk2/jni/libapr.so:
/home/jakarta/jakarta-tomcat-4.0.1/webapps/jk/WEB-INF/jk2/jni/libapr.so:
undefined symbol: crypt
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1382)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1277)
        at java.lang.Runtime.load0(Runtime.java:698)
        at java.lang.System.load(System.java:797)
        at org.apache.jk.apr.AprImpl.loadNative(AprImpl.java:90)
        at org.apache.jk.apr.AprImpl.loadNative(AprImpl.java:78)
        at org.apache.jk.common.ChannelUn.init(ChannelUn.java:135)
+++
The problem is that apr needs other dynamic library.

How should we solve the problem?:
1 - Loading the missing libraries in the JVM (via System.load()) The list of
needed library is in APRVARS.
2 - Link jni_connect.so against a static libapr.a (like in mod_webapp for
Apache-1.3).
    something like: gcc -shared -lm -lcrypt -lnsl -ldl -o jni_connect.so ...
libapr.a

Any comments?

Cheers

Jean-frederic

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: jk2 problems with libapr.so

Posted by Aaron Bannert <aa...@clove.org>.
On Mon, Jan 14, 2002 at 05:12:29PM +0100, jean-frederic clere wrote:
> Hi,
> 
> I am playing with jk2 and I have noted that the loadNative() in AprImpl fails:
> +++
> java.lang.UnsatisfiedLinkError:
> /home/jakarta/jakarta-tomcat-4.0.1/webapps/jk/WEB-INF/jk2/jni/libapr.so:
> /home/jakarta/jakarta-tomcat-4.0.1/webapps/jk/WEB-INF/jk2/jni/libapr.so:
> undefined symbol: crypt
>         at java.lang.ClassLoader$NativeLibrary.load(Native Method)
>         at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1382)
>         at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1277)
>         at java.lang.Runtime.load0(Runtime.java:698)
>         at java.lang.System.load(System.java:797)
>         at org.apache.jk.apr.AprImpl.loadNative(AprImpl.java:90)
>         at org.apache.jk.apr.AprImpl.loadNative(AprImpl.java:78)
>         at org.apache.jk.common.ChannelUn.init(ChannelUn.java:135)
> +++
> The problem is that apr needs other dynamic library.
> 
> How should we solve the problem?:
> 1 - Loading the missing libraries in the JVM (via System.load()) The list of
> needed library is in APRVARS.
> 2 - Link jni_connect.so against a static libapr.a (like in mod_webapp for
> Apache-1.3).
>     something like: gcc -shared -lm -lcrypt -lnsl -ldl -o jni_connect.so ...
> libapr.a
> 
> Any comments?

Sorry for replying to this so late. As an FYI, APRVARS will soon be
removed from APR. Take a look at the replacement apr-config and
apu-config (in apr and apr-util respectively). It's not yet complete
(that's why APRVARS hasn't been removed yet), but if you see something
missing let us know.

-aaron


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: jk2 problems with libapr.so

Posted by jean-frederic clere <jf...@fujitsu-siemens.com>.
costinm@covalent.net wrote:
> 
> That's a bit problematic...
> 
> I think it'll work fine if LD_LIBRARY_PATH is set before starting tomcat
> to include all the libs ( and libapr ) or of libapr ( and the rest ) are
> installed in the system dirs ( i.e. /usr/lib ).

It works better ;-) using System.loadLibrary() and set the LD_LIBRARY_PATH
before starting the JVM solves problem of finding the path.
System.loadNative("/usr/local/lib/libapr.so"); could be changed into
System.loadLibrary(apr);

The remaing problem are the dependencies of libapr.so
How to load the needed libraries?
loadLibrary() does not make the symbols available to other libraries. (like
dlopen(RTLD_NOW|RTLD_GLOBAL)).

> 
> The code in loadNative() was trying to work around and not require the
> user to set LD_LIBRARY_PATH, but including all deps is ugly.
> 
> I suppose having libapr in lib path is a 'decent' requirement and we
> should drop the workaround.
> 
> Using the .a lib is imho the worst solution - and I'm not sure how it'll
> interact with the jni connector ( when apr syms will be loaded twice ).

If there is only one *.so file that is no problem.
Using a dynamic libapr was a lot of problems in mod_webapp.

> 
> Costin
> 
> On Mon, 14 Jan 2002, jean-frederic clere wrote:
> 
> > Hi,
> >
> > I am playing with jk2 and I have noted that the loadNative() in AprImpl fails:
> > +++
> > java.lang.UnsatisfiedLinkError:
> > /home/jakarta/jakarta-tomcat-4.0.1/webapps/jk/WEB-INF/jk2/jni/libapr.so:
> > /home/jakarta/jakarta-tomcat-4.0.1/webapps/jk/WEB-INF/jk2/jni/libapr.so:
> > undefined symbol: crypt
> >         at java.lang.ClassLoader$NativeLibrary.load(Native Method)
> >         at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1382)
> >         at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1277)
> >         at java.lang.Runtime.load0(Runtime.java:698)
> >         at java.lang.System.load(System.java:797)
> >         at org.apache.jk.apr.AprImpl.loadNative(AprImpl.java:90)
> >         at org.apache.jk.apr.AprImpl.loadNative(AprImpl.java:78)
> >         at org.apache.jk.common.ChannelUn.init(ChannelUn.java:135)
> > +++
> > The problem is that apr needs other dynamic library.
> >
> > How should we solve the problem?:
> > 1 - Loading the missing libraries in the JVM (via System.load()) The list of
> > needed library is in APRVARS.
> > 2 - Link jni_connect.so against a static libapr.a (like in mod_webapp for
> > Apache-1.3).
> >     something like: gcc -shared -lm -lcrypt -lnsl -ldl -o jni_connect.so ...
> > libapr.a
> >
> > Any comments?
> >
> > Cheers
> >
> > Jean-frederic
> >
> > --
> > To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> > For additional commands, e-mail: <ma...@jakarta.apache.org>
> >
> 
> --
> To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: jk2 problems with libapr.so

Posted by co...@covalent.net.
That's a bit problematic...

I think it'll work fine if LD_LIBRARY_PATH is set before starting tomcat
to include all the libs ( and libapr ) or of libapr ( and the rest ) are
installed in the system dirs ( i.e. /usr/lib ).

The code in loadNative() was trying to work around and not require the
user to set LD_LIBRARY_PATH, but including all deps is ugly.

I suppose having libapr in lib path is a 'decent' requirement and we
should drop the workaround.

Using the .a lib is imho the worst solution - and I'm not sure how it'll
interact with the jni connector ( when apr syms will be loaded twice ).


Costin


On Mon, 14 Jan 2002, jean-frederic clere wrote:

> Hi,
>
> I am playing with jk2 and I have noted that the loadNative() in AprImpl fails:
> +++
> java.lang.UnsatisfiedLinkError:
> /home/jakarta/jakarta-tomcat-4.0.1/webapps/jk/WEB-INF/jk2/jni/libapr.so:
> /home/jakarta/jakarta-tomcat-4.0.1/webapps/jk/WEB-INF/jk2/jni/libapr.so:
> undefined symbol: crypt
>         at java.lang.ClassLoader$NativeLibrary.load(Native Method)
>         at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1382)
>         at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1277)
>         at java.lang.Runtime.load0(Runtime.java:698)
>         at java.lang.System.load(System.java:797)
>         at org.apache.jk.apr.AprImpl.loadNative(AprImpl.java:90)
>         at org.apache.jk.apr.AprImpl.loadNative(AprImpl.java:78)
>         at org.apache.jk.common.ChannelUn.init(ChannelUn.java:135)
> +++
> The problem is that apr needs other dynamic library.
>
> How should we solve the problem?:
> 1 - Loading the missing libraries in the JVM (via System.load()) The list of
> needed library is in APRVARS.
> 2 - Link jni_connect.so against a static libapr.a (like in mod_webapp for
> Apache-1.3).
>     something like: gcc -shared -lm -lcrypt -lnsl -ldl -o jni_connect.so ...
> libapr.a
>
> Any comments?
>
> Cheers
>
> Jean-frederic
>
> --
> To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>
>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>