0

我正在编译一个 jni 项目。这是我遇到的问题的详细信息:r

oot@kaiwiiho:/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
root@kaiwiiho:/home/kaiwii/svn# ldconfig
root@kaiwiiho:/home/kaiwii/svn# gedit /etc/ld.so.conf
root@kaiwiiho:/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中,我直​​接制作了一个conf文件,/etc/ld.so.conf.d/my.conf:

/usr/lib
/usr/local/lib

然后我使用命令 ldconfig。但不幸的是,我仍然遇到同样的问题。有什么想法吗?thx

4

2 回答 2

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

是不正确的。链接行上的库和源的顺序很重要,您的顺序是错误的。

但这不是你现在的问题。您坚持libjvm.so存在于 中/usr/lib,但没有证据表明它存在。ls -l /usr/lib/libjvm.so实际打印什么?

请注意,libjvm.so/usr/lib. 通常人们会期望在 eg 中找到它/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文件......

显然这还不够。

于 2012-03-31T06:17:30.080 回答
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:

于 2016-12-16T04:08:50.067 回答