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。通常、たとえば で見つかると予想されますが、そのディレクトリ/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リンク行に追加する必要があります。

そして、confファイルをgeditします...

明らかにそれだけでは十分ではありません。

于 2012-03-31T06:17:30.080 に答える