0

假设我有这段代码:

打印.cpp

int print ()
{
  return 10;
}

打印.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.

如果您需要帮助解释此日志,请在此处发表评论并编辑问题以包含完整的构建日志和完整的Android.mk,包括调用BUILD_SHARED_LIBRARY的部分

于 2012-10-20T11:18:13.717 回答