MakeFile: ошибка: ‹jni.h›: нет такого файла или каталога

Я пытаюсь вызвать java из c и сделал следующий 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/"

Я трижды проверил каталоги и разрешения, и все в порядке.

Какие-либо предложения?


person btald1331    schedule 21.01.2016    source источник


Ответы (1)


Вам нужно добавить конец вашего определения 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 include используются компилятором, а не компоновщиком. Это компилятор, который не может найти ваш файл .h.

Вы также можете изменить цели следующим образом

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

Это создаст вам файл .so.

person cleblanc    schedule 21.01.2016