2

Java コード内で C 関数を呼び出そうとしています。私はこのhavaコードを持っています。

public class JavaToC {

    public native void helloC();

    static {
        System.loadLibrary("HelloWorld");
    }

    public static void main(String[] args) {
        new JavaToC().helloC();
    }
}

. 私はそれをコンパイルし、ヘッダーファイルを作成しました。次に、次の HelloWorld.c ファイルを作成します。

#include <stdio.h>
#include <jni.h>
#include "JavaToC.h"
JNIEXPORT void JNICALL Java_JavaToC_helloC(JNIEnv *env, jobject javaobj)
{
  printf("Hello World: From C");
  return;
}

「gcc -o libHelloWorld.so -shared -I/usr/java/include -I/usr/java/include/solaris HelloWorld.c -lc」を使用してこれをコンパイルしようとしましたが、次の結果が得られます。

Text relocation remains                     referenced
    against symbol          offset  in file
.rodata (section)                   0x9         /var/tmp//cc.GaGrd.o
printf                              0xe         /var/tmp//cc.GaGrd.o
ld: fatal: relocations remain against allocatable but non-writable sections
collect2: ld returned 1 exit status

Solaris 11 で作業していますが、どうすれば解決できますか?

4

1 に答える 1