微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

/ usr / bin / ld:编译jni项目时找不到-ljvm:

我正在编译一个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中,我直​​接创build一个conf文件/etc/ld.so.conf.d/my.conf:

/usr/lib /usr/local/lib

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

如何使用保险丝在远程机器上安装目录?

有没有可能在Windows中创build一个虚拟文件? (即FUSE接口)

Windows 2008:虚拟文件系统(如FUSE)

FUSE getattr操作是否应该被序列化?

fork()后出现libCurl SSL错误

文件系统加速 – “查找”命令

如何使用FUSE创build用户空间文件系统而不使用libfuse?

callback文件系统:eldos.cbfs.ECBFSError:访问被拒绝

无法将基于熔丝的卷暴露给Docker容器

Python Fuse连续6次调用“readlink”

这个命令:

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实际上打印了什么?

请注意,在/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文件

显然这是不够的。

由于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 /本地/ lib64下:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐