0

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ファイルがあります

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
4

1 に答える 1

0

必要なもの:

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

于 2013-04-25T12:54:04.937 に答える