那是我第一次使用 android NDK 和 Cygwin,如果有帮助的话,我正在使用 Windows XP 32 位。
我正在尝试移植在 Windows 和 Linux 上使用的 Visual Studio 8 项目以在 android 平台上使用它。该项目相当大,其文件位于多个文件夹中……</p>
尝试使用 ndk-build 构建它时,我收到很多此类错误:
D:/android-ndk-r8d-windows/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-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 文件
安卓.mk
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:=ndkmain
LOCAL_SRC_FILES :=<MyFolder>/<MyFile>.cpp
include $(BUILD_SHARED_LIBRARY)
应用程序.mk
APP_STL :=stlport_shared
APP_ABI:= armeabi-v7a