Android NDK - 链接问题

时间:2013-04-25 12:49:49

标签: android-ndk cygwin native

这是我第一次使用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

1 个答案:

答案 0 :(得分:0)

你需要:

LOCAL_SRC_FILES :=<MyFolder>/<MyFile>.cpp <MyFolder>/Path/To/Get_Version.cpp