2012-03-31 46 views
0

即时编译JNI project.here期间的问题,我遇到的细节: [R在/ usr /斌/劳工处:找不到-ljvm:编译JNI项目

[email protected]:/home/kaiwii/svn# make 
gcc -shared build/utimebufClass.o build/contextClass.o build/fsClass.o build/javafuse_jni.o build/statClass.o build/statvfsClass.o build/fileinfoClass.o build/conninfoClass.o -o build/libjavafuse.so 
gcc -g -Wall `pkg-config --cflags fuse` -Iinclude -I/usr/java/jdk1.6.0_31/include -I/usr/java/jdk1.6.0_31/include/linux `pkg-config --libs fuse` -L/usr/java/packages/lib/i386 -L/lib -L/usr/lib -ljvm -Lbuild -ljavafuse src/javafuse.c -o javafuse 
src/javafuse.c: In function ‘javafuse_readdir’: 
src/javafuse.c:2194:22: warning: cast from pointer to integer of different size 
src/javafuse.c:2195:25: warning: cast from pointer to integer of different size 
src/javafuse.c:2207:15: warning: cast to pointer from integer of different size 
src/javafuse.c:2208:18: warning: cast to pointer from integer of different size 
src/javafuse.c:2256:16: warning: cast from pointer to integer of different size 
src/javafuse.c:2257:19: warning: cast from pointer to integer of different size 
src/javafuse.c:2271:15: warning: cast to pointer from integer of different size 
src/javafuse.c:2272:18: warning: cast to pointer from integer of different size 
src/javafuse.c: In function ‘javafuse_releasedir’: 
src/javafuse.c:2332:12: warning: assignment from incompatible pointer type 
src/javafuse.c: In function ‘javafuse_fsyncdir’: 
src/javafuse.c:2420:12: warning: assignment from incompatible pointer type 
/usr/bin/ld: cannot find -ljvm 
collect2: ld returned 1 exit status 
make: *** [javafuse] 错误 1 
[email protected]:/home/kaiwii/svn# ldconfig 
[email protected]:/home/kaiwii/svn# gedit /etc/ld.so.conf 
[email protected]:/home/kaiwii/svn# make 
gcc -shared build/utimebufClass.o build/contextClass.o build/fsClass.o build/javafuse_jni.o build/statClass.o build/statvfsClass.o build/fileinfoClass.o build/conninfoClass.o -o build/libjavafuse.so 
gcc -g -Wall `pkg-config --cflags fuse` -Iinclude -I/usr/java/jdk1.6.0_31/include -I/usr/java/jdk1.6.0_31/include/linux `pkg-config --libs fuse` -L/usr/java/packages/lib/i386 -L/lib -L/usr/lib -ljvm -Lbuild -ljavafuse src/javafuse.c -o javafuse 
src/javafuse.c: In function ‘javafuse_readdir’: 
src/javafuse.c:2194:22: warning: cast from pointer to integer of different size 
src/javafuse.c:2195:25: warning: cast from pointer to integer of different size 
src/javafuse.c:2207:15: warning: cast to pointer from integer of different size 
src/javafuse.c:2208:18: warning: cast to pointer from integer of different size 
src/javafuse.c:2256:16: warning: cast from pointer to integer of different size 
src/javafuse.c:2257:19: warning: cast from pointer to integer of different size 
src/javafuse.c:2271:15: warning: cast to pointer from integer of different size 
src/javafuse.c:2272:18: warning: cast to pointer from integer of different size 
src/javafuse.c: In function ‘javafuse_releasedir’: 
src/javafuse.c:2332:12: warning: assignment from incompatible pointer type 
src/javafuse.c: In function ‘javafuse_fsyncdir’: 
src/javafuse.c:2420:12: warning: assignment from incompatible pointer type 
/usr/bin/ld: cannot find -ljvm 
collect2: ld returned 1 exit status 
make: *** [javafuse] 错误 1 

而且清酒的该libjvm.so在/ usr/lib中已经AREADY exisited,我直接作出一个CONF文件/ etc/ld.so.conf.d/my.conf:

/usr/lib 
/usr/local/lib 

,然后我使用命令LDCONFIG。 但不幸的是,我仍然遇到同样的问题。 任何想法THX

回答

2

此命令:

gcc -g -Wall `pkg-config --cflags fuse` -Iinclude \ 
    -I/usr/java/jdk1.6.0_31/include \ 
    -I/usr/java/jdk1.6.0_31/include/linux `pkg-config --libs fuse` \ 
    -L/usr/java/packages/lib/i386 -L/lib -L/usr/lib -ljvm -Lbuild -ljavafuse \ 
    src/javafuse.c -o javafuse 

不正确。链接行matters上的库和源的顺序,您的订单是错误的。

但这不是你现在的问题。您坚持认为libjvm.so存在于/usr/lib中,但没有显示它的确存在。 ls -l /usr/lib/libjvm.so实际上打印什么?

请注意,在/usr/lib中找到libjvm.so是非常不寻常的。通常人们会希望在例如/usr/java/packages/lib/i386/server,而您并未搜索目录。

更新:

好。 libjvm.so实际上不是在/usr/lib/usr/java/jdk1.6.0_31/jre/lib/i386/server

在这种情况下,你需要添加-L/usr/java/jdk1.6.0_31/jre/lib/i386/server你的链接线。

而且我的gedit conf文件...

显然,这还不够。

+0

well.libjvm.so实际上不在/ usr/lib中,而是在/usr/java/jdk1.6.0中_31/jre/lib/i386/server.And gedit包含/usr/java/jdk1.6.0_31/jre/lib/i386/server中的conf文件,其中包含/ usr/java/jdk1.6.0_31/jre/lib /i386/server.use命令,ldconfig和reboot.but它仍然提示相同的错误。 – 2012-03-31 07:14:43

+0

谢谢......它的工作原理......实际上我直接使用了这个 - “gcc -g -I /usr/lib/jvm/java-6-sun-1.6.0.26/include -I/usr/lib/jvm/java-6-sun-1.6.0.26/include/linux -L /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/i386/server -ljvm CallJVM.c“,a.out是创建。然后,我需要将它与libjvm.so链接到服务器文件夹中,如后所述。 – Rorschach 2013-04-02 13:43:48

+0

安装python javabridge模块时发现类似问题:/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld:can not找到-ljvm。我创建了一个符号链接:cd/usr/lib; ln -s /usr/lib64/jvm/java-1_6_0-ibm-1.6.0/jre/lib/amd64/default/libjvm.so libjvm.so – 2014-02-18 13:40:05

0

错误即将到来是因为JAVA_HOME & LD_LIBRARY_PATH与Linux不一致。因此,经过分析,我发现每当终端窗口关闭时都会重置JAVA_HOME和LD_LIBRARY_PATH。 因此,设置JAVA_HOME永久解决了以下错误: - JAVA_HOME =/usr/java/latest PATH =/usr/local/sbin:/ usr/local/bin:/ usr/sbin:/ usr/bin:/ root /bin:/usr/java/latest/bin:/bin:/sbin:/usr/lib64/qt-3.3/bin LD_LIBRARY_PATH =/usr/java/jdk1.8.0_111/jre/lib/amd64/server:/ usr/local/lib:/ usr/lib64:/ usr/lib:/ usr/local/lib64:

相关问题