这是我第一次使用Android NDK和Cygwin,如果有任何帮助,我正在使用Windows XP 32位。
我正在尝试移植在Windows和Linux上使用的Visual Studio 8项目,以便在Android平台上使用它。 该项目非常庞大,并且其文件位于多个文件夹中......
当尝试使用ndk-build构建它时,我收到了很多这类错误:
d:/android-ndk-r8d-windows/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin /../ LIB / GCC /臂-Linux的androideabi / 4.6 /../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi-v7a/objs/ndkmain/.o:在功能上 版本:jni / .cpp:75:错误:未定义引用 'get_version(long *,long *,long *,long *)'
对于这个例子,这是我的MyFile.cpp
#include "../KERNEL/Include/Get_Version.h"
long Version (long *a,
long *b,
long *c,
long *d)
{
if(get_version(a, b, c, d) == -1)
return(IDP_ERR_POINTER);
return (IDP_CORRECT);
}
get_version(long *,long *,long *,long *)在Get_Version.h标头中定义良好,并且找到了Get_Version.h标头
Get_Version.h:
#ifndef GET_VERSION_H_
#define GET_VERSION_H_
int get_version(long *a, long *b, long *c, long *d);
#endif //#define GET_VERSION_H_
Get_Version.cpp:
#include <stdlib.h>
#include "../Include/Get_Version.h"
int get_version(long *a, long *b, long *c, long *d)
{
if (a == NULL){ return -1;}
if (b == NULL){ return -1;}
if (c == NULL){ return -1;}
if (d == NULL){ return -1;}
*a = 3;
*b = 1;
*c = 8;
*d = 2;
return (0);
}
如果不是链接标题,而是将源文件链接到 #include“../ KERNEL / Source / Get_Version.cpp”错误消失,但我想避免这样做,因为它会做不好的做法......
我的猜测是编译器无法将Get_Version.cpp中函数的定义链接到Get_Version.h中的声明,但我不知道如何使用android ndk和cygwin强制此链接...
感谢您的帮助。
PS:这是我的.mk文件
Android.mk
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:=ndkmain
LOCAL_SRC_FILES :=<MyFolder>/<MyFile>.cpp
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_STL :=stlport_shared
APP_ABI:= armeabi-v7a
答案 0 :(得分:0)
你需要:
LOCAL_SRC_FILES :=<MyFolder>/<MyFile>.cpp <MyFolder>/Path/To/Get_Version.cpp