Я следующий код C реализован с помощью ссылки на файл заголовка уже сформировавшийся с JNI:Проблем с компиляцией JNI
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
Когда я пытаюсь скомпилировать его (для создания так библиотеки) с помощью:
cc -g -I/usr/lib/jvm/java-7-openjdk/include
-I/usr/lib/jvm/java-7-openjdk/include/linux HelloWorld.c -o libHelloWorld.so
Я получил эту ошибку:
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
Как я могу решить эту проблему?
У меня была такая же ошибка, как и у ОП. Мне удалось запустить первую команду правильно, однако после выполнения второй команды я получаю это:/usr/bin/ld: HelloWorld.o: перемещение R_X86_64_32 в отношении '.rodata 'не может использоваться при создании общего объекта; перекомпилировать с -fPIC HelloWorld.o: символы с добавлением ошибок: Плохое значение collect2: ошибка: ld возвращен 1 статус выхода Любые идеи? – hadis
@hadis, вероятно, вам нужно скомпилировать с -fPIC, как подсказывает ошибка – msam
Это сработало, спасибо. – hadis