android - 将 Android NDK make 文件重构为模块

标签 android c++ c android-ndk makefile

我在将一些 make 文件重构为可管理的模块时遇到问题。

以下是我尝试完成的结构:

  • jni/安卓.mk
  • jni/应用程序.mk
  • jni/libobj/Android.mk
  • jni/libpng/Android.mk
  • jni/libzip/Android.mk
  • jni/freetype/Android.mk
  • jni/ftgles/Android.mk
  • jni/qcar/Android.mk
  • jni/imagetargets/Android.mk

Note: I started from the Vuforia SDK ImageTargets example and added some other libraries like reading OBJ, PNG and ZIP files. I've also included the freetype and ftgles library.

我从根 Android.mk 文件调用其他 make 文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS) 

include jni/libobj/Android.mk 
include jni/libpng/Android.mk
include jni/libzip/Android.mk
include jni/freetype/Android.mk
include jni/ftgles/Android.mk
include jni/qcar/Android.mk
include jni/imagetargets/Android.mk

可以看到 all make files in a gist on github .

编译器给出如下错误:

Install : libFTGLES.so => libs/armeabi/libFTGLES.so Compile++ arm : ImageTargets <= ImageTargets.cpp jni/imagetargets/ImageTargets.cpp:44:24: fatal error: libpng/png.h: No such file or directory compilation terminated. make: * [obj/local/armeabi/objs/ImageTargets/ImageTargets.o] Error 1

知道如何使 libpng(和其他模块) header 可用于 imagetargets 模块吗?

最佳答案

我认为使用 LOCAL_EXPORT_C_INCLUDES 在每个子 makefile 中指定包含的路径将确保在构建最终模块时 header 可用。

在 NDK 文档(在您的 NDK 目录中可用)中检查此标志的文档,但据我了解,它会完全按照您的意愿执行:自动将每个子模块的包含路径导出到最终模块。

关于android - 将 Android NDK make 文件重构为模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16731442/

相关文章:

java - 如何从另一个 Activity 刷新 viewModel 实时数据

java - `Caused by: java.lang.RuntimeException: view must have a tag` 的实际含义是什么?

c++ - 为 CMake 链接 Openscenegraph 库

c++ - 隐藏内存分配?

代码在循环的第二次运行时停止

android - 使用 Dagger 2 自动注入(inject) Activity 的问题

android - 如何在 Ice Cream Sandwich 的通知栏上添加图片

c++ - 不规则的 Makefile 行为?

C++ Vector - Emplace/Erase 不起作用?(多态性)

c - 类似函数的宏和变量