Как исправить UnsatisfiedLink при добавлении нативного кода в hadoop-src - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь добавить новый собственный кодировщик raw в hadoop-3.0.3, но столкнулся с ошибкой "UnsatisfiedLink".

Поскольку коды, которые я добавляю, копируются из существующего кодера XOR, логика может не ошибаться.

Я изменил существующий тестовый пример (TestNativeXORRawCoder), который также вызывает ту же ошибку.

тестовый код:

public class TestNativeMineRawCoder extends TestXORRawCoderBase {

  @Before
  public void setup() {
    Assume.assumeTrue(ErasureCodeNative.isNativeCodeLoaded());
    this.encoderFactoryClass = NativeMineRawErasureCoderFactory.class;
    this.decoderFactoryClass = NativeMineRawErasureCoderFactory.class;
    setAllowDump(true);
  }

  @Test
  public void testAfterRelease63() throws Exception {
    prepare(6, 3, null, null);
    testAfterRelease();
  }
}

нативная функция в Java:

private native void initImpl(int numDataUnits, int numParityUnits);

.c для jni:

JNIEXPORT void JNICALL
Java_org_apache_hadoop_io_erasurecode_rawcoder_NativeMineRawEncoder_initImpl
  (JNIEnv *env, jobject thiz, jint numDataUnits, jint numParityUnits) {
  XOREncoder* xorEncoder =
                           (XOREncoder*)malloc(sizeof(XOREncoder));
  memset(xorEncoder, 0, sizeof(*xorEncoder));
  initCoder(&xorEncoder->isalCoder, numDataUnits, numParityUnits);

  setCoder(env, thiz, &xorEncoder->isalCoder);
}

Я ожидаю, что он пройдет тест, но возникают ошибки "UnsatisfiedLink"

TestNativeMineRawCoder.testAfterRelease63:41->TestRawCoderBase.testAfterRelease:116->TestRawCoderBase.prepareCoders:248->TestRawCoderBase.createEncoder:280 » UnsatisfiedLink

-

java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.erasurecode.rawcoder.NativeMineRawEncoder.initImpl(II)V

, поскольку файл .h генерируется автоматически, но файл .c создается и именуется мной самостоятельно, я думаю, это может вызвать ошибку, но я не знаю, как сообщить системе, что здесь целевой файл .c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...