malcolmsparks/java-simple-serial-connector

GLIBC_2.15 not found

GoogleCodeExporter opened this issue · 10 comments

We are using jSSC 2.5.0 on Debian Wheezy which has Libc 2.13. 

Creating a new instance of a SerialPort gives this exception:

Exception in thread "Thread1" java.lang.UnsatisfiedLinkError: 
/home/telcred/.jssc/linux/libjSSC-2.5_x86_64.so: 
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by 
/home/telcred/.jssc/linux/libjSSC-2.5_x86_64.so)
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1750)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1646)
        at java.lang.Runtime.load0(Runtime.java:787)
        at java.lang.System.load(System.java:1022)
        at jssc.SerialNativeInterface.<clinit>(SerialNativeInterface.java:159)
        at jssc.SerialPort.<init>(SerialPort.java:113)


We tried to force jSSC to use a newer libc6 by using libc6-2.15 and libc6-2.17 
from various other sources (add conf to /etc/ld.so.conf.d/ and do ldconfig, run 
JVM with "-Djava.library.path=<path to libc6>") but libjSSC-2.5_x86_64.so 
always looks in only one place for libc.so.6, namely /lib/x86_64-linux-gnu/
We also tried to set the search path with LD_PRELOAD and LD_LIBRARY_PATH 
environment variables but the former just gave an error ("couldn't load 
<libname>, ignoring it") and the latter did nothing at all. Both variables were 
exported OK.

Do you know of any way we could force jSSC to search for libc.so.6 on a custom 
path?

We do not want to upgrade our OS, nor force-update the libc6 used by the OS, so 
the only option for us would be to recompile the jSSC native libs from source 
against libc6-2.13. It would help a lot if we could get hold of the build 
scripts you use. Could you make the build scripts available here?

Original issue reported on code.google.com by telc...@gmail.com on 10 May 2013 at 2:06

[deleted comment]
Same problem on CentOS 5.9

2013-05-11 08:28:05,012 [main] INFO  
net.dfware.asterisk.cdr2serial.Cdr2SerialConf - Serial to use: /dev/ttyUSB0 
9600,8,1,none
Exception in thread "main" java.lang.UnsatisfiedLinkError: 
/root/.jssc/linux/libjSSC-2.5_x86_64.so: /lib64/libc.so.6: version `GLIBC_2.15' 
not found (required by /root/.jssc/linux/libjSSC-2.5_x86_64.so)
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1939)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1864)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1825)
        at java.lang.Runtime.load0(Runtime.java:792)
        at java.lang.System.load(System.java:1059)
        at jssc.SerialNativeInterface.<clinit>(SerialNativeInterface.java:159)
        at jssc.SerialPortList.<clinit>(SerialPortList.java:43)
        at net.dfware.asterisk.cdr2serial.SerialUtil.exist(SerialUtil.java:16)
        at net.dfware.asterisk.cdr2serial.Main.init(Main.java:55)
        at net.dfware.asterisk.cdr2serial.Main.main(Main.java:36)

Original comment by pdi...@gmail.com on 11 May 2013 at 6:31

Yes, jSSC-2.5.0 builded with GCC-4.6 on Xubuntu-12.04 and use glibc-2.15. In 
this situation the simplest and correct way is to recompile native libs. You 
can do it by these strings:

g++ -m32 -O3 -s -I/usr/local/java/jdk1.6.0_45/include 
-I/usr/local/java/jdk1.6.0_45/include/linux -fPIC jssc.cpp -shared -o 
libjSSC-2.5_x86.so
g++ -m64 -O3 -s -I/usr/local/java/jdk1.6.0_45/include 
-I/usr/local/java/jdk1.6.0_45/include/linux -fPIC jssc.cpp -shared -o 
libjSSC-2.5_x86_64.so

As I see it could be a frequently problem, I will rebuild jSSC in a few days.

Original comment by scream3r.org@gmail.com on 11 May 2013 at 7:09

[deleted comment]
You recompiled jSSC native lib, or place other version of glibc into 
~/.jssc/linux ?

Original comment by scream3r.org@gmail.com on 11 May 2013 at 12:00

I have recompiled jSSC native lib and put it into ~/.jssc/linux. Sorry for my 
poor English.

I ask you if I must remove native libs from jar for avoiding conflits.

Original comment by pdi...@gmail.com on 11 May 2013 at 2:37

No, you don't, jSSC check native lib in ~/.jssc/linux and load it if find. You 
can just replace original Linux native 2.5 lib in jSSC.jar archive by lib that 
you compiled.

Original comment by scream3r.org@gmail.com on 11 May 2013 at 3:20

We recompiled the native lib as instructed and it works perfectly. Thanks!

Original comment by telc...@gmail.com on 13 May 2013 at 2:16

PS. We are using openJDK and it compiled without a problem once we found the 
right include path.

Original comment by telc...@gmail.com on 13 May 2013 at 2:17

Fixed in 2.6.0 The new jSSC-2.6.0 version builded with Ubuntu 10.04 and don't 
depends GLIBC-2.15

Original comment by scream3r.org@gmail.com on 1 Jun 2013 at 11:50

  • Changed state: Fixed