将Makefile转换为Android.mk
Convert Makefile to Android.mk
我有一个给定的c++项目,它有一个JNI接口和一个makefile,它创建了一个可以从Java应用程序成功调用的共享库。通过在Ubuntu中使用纯Java,一切都很好。
现在我想从Android应用程序执行JNI调用,所以我必须为Android构建c++共享库,这是我的问题,因为我不太熟悉c++和makefile。
我的第一步是构建一个简单的c++测试项目,该项目只包含两个具有标准算术运算的类,以熟悉该过程。一切都很好,我可以从我的Android应用程序执行本机操作。
现在,我当前的步骤是从给定的c++项目中构建一个共享库,该库可以通过makefile构建,但不能通过Android.mk
makefile看起来像以下部分:
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
MY_INCLUDES=./
CC=g++
ARCH = $(shell uname -m)
CFLAGS=-c -fPIC -D$(ARCH) -DOS_LINUX -Wall
all: libSteering
clean:
rm obj/*.o libSteering.so
# the shared library
libSteering: Steering.o customizestub-JNI.o objs.o linwin.o qflite.o csocketclass.o ioclass.o ioportclass.o
$(CC) obj/Steering.o obj/customizestub-JNI.o obj/objs.o obj/linwin.o obj/qflite.o obj/csocketclass.o
obj/ioclass.o obj/ioportclass.o -shared -lrt -o libSteering.so
# The JNI file needs Java includes as well
Steering.o: Steering.cpp Steering.h
$(CC) $(CFLAGS) Steering.cpp -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux -I$(MY_INCLUDES) -o obj/Steering.o
# the rest of the CAPI source files
customizestub-JNI.o: customizestub-JNI.cpp
$(CC) $(CFLAGS) customizestub-JNI.cpp -I$(MY_INCLUDES) -o obj/customizestub-JNI.o
objs.o: shared/sw/api/src/objs.cpp
$(CC) $(CFLAGS) shared/sw/api/src/objs.cpp -I$(MY_INCLUDES) -o obj/objs.o
# special hack for Linwin, so it doesn't call clokc_gettime()
linwin.o: shared/sw/src/linwin.cpp
$(CC) $(CFLAGS) -DELDK -I$(MY_INCLUDES) shared/sw/src/linwin.cpp -o obj/linwin.o
qflite.o: shared/sw/src/qflite.cpp
$(CC) $(CFLAGS) -I$(MY_INCLUDES) shared/sw/src/qflite.cpp -o obj/qflite.o
csocketclass.o: shared/sw/io/src/csocketclass.cpp
$(CC) $(CFLAGS) -I$(MY_INCLUDES) shared/sw/io/src/csocketclass.cpp -o obj/csocketclass.o
ioclass.o: shared/sw/io/src/ioclass.cpp
$(CC) $(CFLAGS) -I$(MY_INCLUDES) shared/sw/io/src/ioclass.cpp -o obj/ioclass.o
ioportclass.o: shared/sw/io/src/ioportclass.cpp
$(CC) $(CFLAGS) -I$(MY_INCLUDES) shared/sw/io/src/ioportclass.cpp -o obj/ioportclass.o
我创建了以下Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := Steering.cpp customizestub-JNI.cpp shared/sw/api/src/objs.cpp shared/sw/src/linwin.cpp shared/sw/src/qflite.cpp shared/sw/io/src/csocketclass.cpp shared/sw/io/src/ioclass.cpp shared/sw/io/src/ioportclass.cpp
LOCAL_MODULE := Steering
include $(BUILD_SHARED_LIBRARY)
我直接得到了一些编译错误,告诉我没有定义成员变量和getter方法。所以我觉得我对include有一些问题。也许任何人都可以帮助我们。
非常感谢
您可以使用LOCAL_C_INCLUDES
添加包含路径,例如:
LOCAL_C_INCLUDES += $(JAVA_HOME)/include
LOCAL_C_INCLUDES += $(JAVA_HOME)/include/linux
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用ndk-build.cmd构建Android.so文件
- Android NDK传感器向事件队列报告奇怪的间隔
- 我在 ndk 中构建文件时遇到错误 android.mk
- 如何更新/订购'Android.mk'文件?
- 包括来自预构建库Android.mk的标题文件
- android.mk-包括与NDK辅助的本机C 的OPENCV目录
- 创建目录中所有.cpp文件和 android.mk 子目录中的FILE_LIST
- Android.mk 添加LOCAL_CPPFLAGS不起作用
- 如何在Android NDK的 Android.mk 文件中正确包含预构建的静态库?
- 将Makefile转换为Android.mk
- 使用与Application.mk中定义的STL不同的STL编译android ndk模块
- 您的APP_BUILD_SCRIPT指向未知文件:/jni/Android.mk F:/Android/Android-
- NDK文件标志中的Android.mk
- 如何在 Android.mk 中添加仅限 C 的选项
- 警告:/Android.mk:链接器标志中的非系统库
- Android.mk:为Linux构建库
- Android.Mk将编译.c源代码,但不编译.cpp
- 如何编译我的c++库在纯Android Studio的方式(不指定任何.mk文件在我们自己)
- Android.mk文件中的C++扩展