0

このコードがあるとしましょう:

print.cpp

int print ()
{
  return 10;
}

print.h

#ifndef PRINT_H
#define PRINT_H
int print(); // function prototype for add.h
#endif

ライブラリ呼び出しlibTest.aにコンパイルしました

今、私はこの android.mk ファイルを持っているとしましょう

include $(CLEAR_VARS)
LOCAL_MODULE    := libtest
LOCAL_SRC_FILES := ../issmlib/libTest.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../include
include $(PREBUILT_STATIC_LIBRARY)

もちろん、共有のようなものは他にもありますが、それらはすべて正常に動作すると仮定します!!! 私は libTest.a を issmlib というフォルダーに入れました。これはプロジェクトの jni フォルダーと同じレベルにあり、print.h を include というフォルダーに入れました。

これが私のメインです:

#include "com_lan_factorial_FacLib.h"
#include "fac.h"

    //extern long fac(long n);

    JNIEXPORT jlong JNICALL Java_com_lan_factorial_FacLib_fac(JNIEnv *env, jclass clazz, jlong n)
    {
        fac *f = new fac();
        jlong result = (jlong) (f->factorial(n));
        delete(f);
        return result + print();
    }

そのため、結果を計算し、それに 10 を加算します。そのビルド済みライブラリの使用方法がわかりません。#include "print.h" を指定する必要がありますか? 取り出すと、print() が宣言されていないと文句を言います。

これは C++ に関する質問ですが、お役に立てれば幸いです。 ここに画像の説明を入力

私の Android.mk へのパスは問題ないと思いますが、おかしなところを見つけたら教えてください。どうもありがとう。

4

1 に答える 1

0

コマンドラインV=1にパラメータがあることを確認してください。ndk-buildこのように、ndk-build によって準備された実際のコンパイル コマンドが表示されます。これにより、多くの場合、 のパス定義のどこが間違っているかの手がかりが得られAndroid.mkます。

このログの解釈にサポートが必要な場合は、ここにコメントを残して、質問を編集して完全なビルド ログと、BUILD_SHARED_LIBRARYAndroid.mkを呼び出す部分を含む完全な を含めてください。

于 2012-10-20T11:18:13.717 に答える