繁体   English   中英

MakeFile:错误: <jni.h> : 没有相应的文件和目录

[英]MakeFile: error: <jni.h>: No such file or directory

我正在尝试从c调用java,并且已经创建了以下MakeFile:

include ../../Makefile.defs

auto_gen=
NAME=libproto.so
CC=gcc
CFLAGS= -g -Wall -fPIC
LIBS= -L'$(LD_LIBRARY_PATH)' -ljvm -I"/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91.x86_64/include/" -I"/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91.x86_64/include/linux" -I"/usr/local/lib64/kamailio/"
include ../../Makefile.modules


SOURCE=jni_wrapper.c ProtoType.c
OBJECTS=$(SOURCE:.c=.o)

all: $(SOURCE) $(NAME)

%.o: %.c
    $(CC) $(CFLAGS) -c $(LIBS) $<

clean:
    rm -f $(EXEC); rm -f *~; rm -f .*.swp; rm -f .*.swo; rm -f *.o

java:
    javac ProtoType.java
    jar cf ProtoType.jar ProtoType.class
    javap -s -p ProtoType > sigs.txt
    cat sigs.txt

当我用make编译时,出现如下错误:

error: <jni.h>: No such file or directory

我浏览了许多有类似问题的stackoverflow页面,但是它们都有与我已经实现的相同的解决方案。 他们说您需要将库路径链接到jni.h。

如您在我的MakeFile中所看到的,这已经完成了:

LIBS= -L'$(LD_LIBRARY_PATH)' -ljvm -I"/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91.x86_64/include/" -I"/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91.x86_64/include/linux" -I"/usr/local/lib64/kamailio/"

我三重检查了目录和权限,一切都很好。

有什么建议么?

您需要将LIBS定义的末尾添加到CFLAGS

CFLAGS= -g -Wall -fPIC -I"/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91.x86_64/include/" -I"/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91.x86_64/include/linux" -I"/usr/local/lib64/kamailio/"
LIBS= -L'$(LD_LIBRARY_PATH)' -ljvm  

-I包含目录由编译器而非链接器使用。 是编译器找不到您的.h文件。

您可能还需要如下更改目标

%.o: %.c
    $(CC) $(CFLAGS) -c $<
$(NAME): $(OBJECTS)
    $(CC) $(OBJECTS) -o $@ $(LIBS)

这将生成您的.so文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM