【问题标题】:Android NDK - Linking issueAndroid NDK - 链接问题
【发布时间】:2013-04-25 12:49:48
【问题描述】:

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

Android.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

【问题讨论】:

    标签: android-ndk cygwin native


    【解决方案1】:

    你需要:

    LOCAL_SRC_FILES :=&lt;MyFolder&gt;/&lt;MyFile&gt;.cpp &lt;MyFolder&gt;/Path/To/Get_Version.cpp

    【讨论】:

    • 它似乎解决了我的问题,但是我需要将我的每一个 cpp 文件添加到 Android.mk 吗?谢谢
    • 没错。这就是您告诉 Android 构建系统需要构建什么的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2011-09-07
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    相关资源
    最近更新 更多