Linux上的Java LoadLibrary问题

时间:2011-07-11 14:32:31

标签: java linux

我正在通过System.LoadLibrary()调用在Linux上加载一个库。 (之前被问及here

一个新的转折是我发现gstack,所以我可以看到它实际被冻结的地方。我看到的一个红旗是这样的:

Thread 15 (Thread 0xb73feb90 (LWP 12892)):
#0  0xb7f57402 in __kernel_vsyscall ()
#1  0x0075ebc5 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#2  0x7fd2416c in system__task_primitives__operations(short, long,...)(...)( *) () from /app/gnatpro6.2.2-linux/lib/gcc/i686-pc-linux-gnu/4.3.3/adalib/libgnarl-6.2.so
#3  0x7fd2cd13 in system__tasking__stages__activate_tasks () from /app/gnatpro6.2.2-linux/lib/gcc/i686-pc-linux-gnu/4.3.3/adalib/libgnarl-6.2.so
#4  0x7fd2272c in system__interrupts___elabb () from /app/gnatpro6.2.2-linux/lib/gcc/i686-pc-linux-gnu/4.3.3/adalib/libgnarl-6.2.so
#5  0xb7377e37 in loadinit () from /home/user1/workspace/javaLinux/lib/libload.so
#6  0xb7377ecd in __do_global_ctors_aux () from /home/user1/workspace/javaLinux/lib/libload.so
#7  0xb7377579 in _init () from /home/user1/workspace/javaLinux/lib/libload.so
#8  0x005b73f3 in call_init () from /lib/ld-linux.so.2
#9  0x005b7503 in _dl_init_internal () from /lib/ld-linux.so.2
#10 0x005baeab in dl_open_worker () from /lib/ld-linux.so.2
#11 0x005b7036 in _dl_catch_error () from /lib/ld-linux.so.2
#12 0x005ba652 in _dl_open () from /lib/ld-linux.so.2
#13 0x0074ec6d in dlopen_doit () from /lib/libdl.so.2
#14 0x005b7036 in _dl_catch_error () from /lib/ld-linux.so.2
#15 0x0074f2ec in _dlerror_run () from /lib/libdl.so.2
#16 0x0074eba4 in dlopen@@GLIBC_2.1 () from /lib/libdl.so.2
#17 0xb792c099 in os::dll_load(char const*, char*, int) () from /home/user1/tools/Linux/jdk1.6.0_17/jre/lib/i386/server/libjvm.so
#18 0xb77e0cd9 in JVM_LoadLibrary () from /home/user1/tools/Linux/jdk1.6.0_17/jre/lib/i386/server/libjvm.so
#19 0xb7394cac in Java_java_lang_ClassLoader_00024NativeLibrary_load () from /home/user1/tools/Linux/jdk1.6.0_17/jre/lib/i386/libjava.so
#20 0xb43554aa in ?? ()
#21 0x086a9510 in ?? ()
#22 0xb73fdf34 in ?? ()
#23 0xb73fdf30 in ?? ()
#24 0xb434e08d in ?? ()
#25 0xb73fdf00 in ?? ()
#26 0x00000000 in ?? ()

具体来说:#17 0xb792c099 in os :: dll_load

这不应该调用Linux加载库调用,而不是dll调用吗?任何想法为什么会打错电话?

1 个答案:

答案 0 :(得分:2)

我认为,这只是命名事项的问题。看起来,JVM作者更喜欢命名他们的包装器dll_load而不是so_load。如果你看一下堆栈跟踪(特别是列表中正上方的框架),你会看到

dlopen@@GLIBC_2.1 () from /lib/libdl.so.2

实际 Linux等效于Windows下的LoadLibrary

相关问题