让我说我有这段代码:
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路径很好,但是如果你发现了一些奇怪的东西,请告诉我。 非常感谢。
答案 0 :(得分:0)
确保V=1
命令行上有ndk-build
参数。这样,您将看到由ndk-build准备的实际编译命令。这通常会为Android.mk
中的路径定义出现问题提供线索。
如果您需要帮助来解释此日志,请在此处留下评论并编辑问题以包含完整的构建日志和完整的Android.mk
,包括调用 BUILD_SHARED_LIBRARY