Date: Sun, 25 Jan 2004 14:06:02 -0800 From: "Renaud Waldura" <renaud+freebsd-java@waldura.com> To: <freebsd-java@freebsd.org> Subject: Re: Problems linking against pthreads Message-ID: <001f01c3e38f$6d6b8fa0$011211ac@biohz.net> References: <001101c3e384$ae908180$011211ac@biohz.net>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. ------=_NextPart_000_001C_01C3E34C.5DADD980 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit I got it. I needed to link the glue library against libc_r. I attach a patch with my changes, maybe it will help somebody one day... ----- Original Message ----- From: "Renaud Waldura" <renaud+freebsd-java@waldura.com> To: <freebsd-java@freebsd.org> Sent: Sunday, January 25, 2004 12:49 PM Subject: Problems linking against pthreads > I'm attempting to write an Icecast stream source in Java. I've got Icecast > 2.0 all built up and working, with all its libraries libshout, libvorbis > etc. > > I have found this package: > http://benow.ca/index?page=project&project=libshout-java > that allows me to make calls to libshout from a Java program, but I'm having > a hard time getting the library links resolved correctly. > > When running a Java program that uses the libshout-java glue, I get: > > java.lang.UnsatisfiedLinkError: > /home/renaud/src/libshout-java-0.1-freebsd/native/libshoutjava.so.1.0: > /usr/local/lib/libshout.so.3: Undefined symbol "pthread_cond_signal" > > OK, so it looks like libshout needs pthreads. Another program that uses > libshout is linked against both libc and libc_r, thus including pthreads. > > work/ices-2.0-Beta2/src/ices: > libshout.so.3 => /usr/local/lib/libshout.so.3 (0x28158000) > libc_r.so.4 => /usr/lib/libc_r.so.4 (0x28343000) > libc.so.4 => /usr/lib/libc.so.4 (0x283fa000) > > Yet the Diablo VM I'm using is linked against libc only: > > java version "1.3.1" > Java(TM) 2 Runtime Environment, Standard Edition (build diablo-1.3.1-0) > Classic VM (build diablo-1.3.1-0, green threads, nojit) > > /usr/local/diablo-jdk1.3.1/jre/bin/i386/green_threads/java: > libhpi.so => not found (0x0) > libc.so.4 => /usr/lib/libc.so.4 (0x28067000) > > This is where I get stuck. How can I provide libc_r to my libshout when the > VM doesn't use it? Or is this the wrong approach? > > I'm running FreeBSD 4.2-RELEASE. Thanks for any clues! > > --Renaud > ------=_NextPart_000_001C_01C3E34C.5DADD980 Content-Type: application/octet-stream; name="libshout-java-0.1-freebsd.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="libshout-java-0.1-freebsd.patch" Only in libshout-java-0.1: build=0A= diff -u -r libshout-java-0.1/build.xml = libshout-java-0.1-freebsd/build.xml=0A= --- libshout-java-0.1/build.xml Sun Dec 14 18:26:00 2003=0A= +++ libshout-java-0.1-freebsd/build.xml Sun Jan 25 02:27:04 2004=0A= @@ -58,7 +58,7 @@=0A= =0A= <target name=3D"native" depends=3D"compile"=0A= description=3D"Compile native code">=0A= - <exec dir=3D"native" executable=3D"make"/>=0A= + <exec dir=3D"native" executable=3D"gmake"/>=0A= </target>=0A= =0A= <target name=3D"jar" depends=3D"compile"=0A= Only in libshout-java-0.1: dist=0A= diff -u -r libshout-java-0.1/native/Makefile = libshout-java-0.1-freebsd/native/Makefile=0A= --- libshout-java-0.1/native/Makefile Sun Dec 14 18:26:00 2003=0A= +++ libshout-java-0.1-freebsd/native/Makefile Sun Jan 25 13:43:53 2004=0A= @@ -1,5 +1,5 @@=0A= # v-- Change these to match your install --v=0A= -prefix=3D/opt/jdk=0A= +prefix=3D/usr/local/diablo-jdk1.3.1=0A= #=0A= =0A= SHELL =3D /bin/sh=0A= @@ -7,11 +7,11 @@=0A= JAVADIR=3D$(prefix)=0A= REL_JAVAEXTLIBPATH=3Djre/lib/i386=0A= JAVAEXTLIBPATH=3D$(JAVADIR)/$(REL_JAVAEXTLIBPATH)=0A= -OSNAME=3Dlinux=0A= +OSNAME=3Dfreebsd=0A= ARCHNAME=3Di386=0A= CC=3Dgcc=0A= DEFINES=3D-DUSE_LAME_API=0A= -CPPFLAGS=3D-g -Wall -I$(JAVADIR)/include -I$(JAVADIR)/include/$(OSNAME) = -fPIC -D_REENTRANT $(DEFINES)=0A= +CPPFLAGS=3D-g -Wall -I/usr/local/include -I$(JAVADIR)/include = -I$(JAVADIR)/include/$(OSNAME) -fPIC -D_THREAD_SAFE $(DEFINES)=0A= INSTALL =3D /bin/install -c=0A= INSTALL_PROGRAM =3D ${INSTALL}=0A= INSTALL_DATA =3D ${INSTALL} -m 644=0A= @@ -30,7 +30,7 @@=0A= LIBDEST=3D$(LIBBASENAME).so.1.0=0A= LIBDEST_ABSOLUTE=3D$(ABS_PREFIX)/$(LIBDEST)=0A= =0A= -LIBS=3D-lshout=0A= +LIBS=3D-lc_r -L/usr/local/lib -lshout=0A= =0A= JAVAH =3D javah -force -classpath $(OBJDIR)=0A= =0A= Binary files libshout-java-0.1/native/libshoutjava.so and = libshout-java-0.1-freebsd/native/libshoutjava.so differ=0A= Binary files libshout-java-0.1/native/libshoutjava.so.1 and = libshout-java-0.1-freebsd/native/libshoutjava.so.1 differ=0A= Binary files libshout-java-0.1/native/libshoutjava.so.1.0 and = libshout-java-0.1-freebsd/native/libshoutjava.so.1.0 differ=0A= diff -u -r libshout-java-0.1/native/org_xiph_libshout_Shout.c = libshout-java-0.1-freebsd/native/org_xiph_libshout_Shout.c=0A= --- libshout-java-0.1/native/org_xiph_libshout_Shout.c Sun Dec 14 = 18:26:00 2003=0A= +++ libshout-java-0.1-freebsd/native/org_xiph_libshout_Shout.c Sun Jan = 25 10:45:33 2004=0A= @@ -326,12 +326,13 @@=0A= */=0A= JNIEXPORT jint JNICALL Java_org_xiph_libshout_Shout_n_1write(JNIEnv = *env, jobject obj, jcharArray chars, jint len) {=0A= int i;=0A= - =0A= + jchar *elems;=0A= +=0A= // if the buffer is greater than our internal, return error (shouldn't = happen)=0A= if (len>8192) return SHOUTERR_MALLOC; =0A= =0A= // copy to const array=0A= - jchar *elems=3D(*env)->GetCharArrayElements(env, chars, 0);=0A= + elems=3D(*env)->GetCharArrayElements(env, chars, 0);=0A= for (i=3D0;i<len;i++) buffer[i]=3Delems[i];=0A= (*env)->ReleaseCharArrayElements(env, chars,elems,0);=0A= =0A= ------=_NextPart_000_001C_01C3E34C.5DADD980--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?001f01c3e38f$6d6b8fa0$011211ac>