android ndk build在build-binary.mk:369上失败

时间:2012-07-12 02:36:31

标签: android android-ndk

我有一个包含数百个c ++文件的大项目,我应该将其移植到Android。我是该项目的新手,也是NDK的新手。我摆脱了大多数错误,并且ndk构建进展到这里:

  

Compile ++ thumb:mylib< = MyApp.cpp

     

SharedLibrary:libmylib.so

     

./ obj / local / armeabi / objs / mylib / MyApp.o:在函数`MyClass :: MyFunction(unsigned long,void *,unsigned long long)':

     

C:\ Development /./ jni / AClass.h:249:未定义引用`MyClass :: Function(unsigned long,void *,unsigned long long)'

     

....这里有很多这些错误信息......

     

collect2:ld返回1退出状态

     

/cygdrive/c/Android/android-ndk/android-ndk-r8/build/core/build-binary.mk:369:目标`obj / local / armeabi / libmylib.so'的配方失败

     

make: * [obj / local / armeabi / libmylib.so]错误1

它现在甚至转到“SharedLibrary:libmylib.so”,但后来我得到了大量这些错误“未定义的引用”,如上所述。包含类并定义函数。

build-binary.mk中的第369行是:

  

@ $(致电host-mkdir,$(dir $ @))

但我不知道这意味着什么。我读了一些关于共享库的权限问题的内容,并设置所有文件以允许所有内容,但这并没有改变任何东西。可能因为某些原因mkdir失败了吗?有谁知道问题可能是什么?

非常感谢任何帮助!

这是我的Android.mk文件:

  

LOCAL_PATH:= $(致电my-dir)

     

包括$(CLEAR_VARS)

     

LOCAL_MODULE:= mylib

     

LOCAL_SRC_FILES:= MyApp.cpp

     

LOCAL_CFLAGS:= -D_Android_ -D_Debug _

     

包括$(BUILD_SHARED_LIBRARY)

2 个答案:

答案 0 :(得分:0)

可能发生了三件事之一:

  • 您实际上并没有编译这些函数的代码,可能是因为它被#ifdef包围,或者因为没有构建相关文件。您可以检查是否存在与其源对应的.o文件。你也可以把#error放在函数的主体中,并验证构建在那里失败(我知道它听起来很愚蠢,但它会捕获浪费时间的愚蠢错误)

  • 这些函数位于未链接的目标文件或库中。在这种情况下,您需要将缺少的部分添加到链接中。

  • 这些函数位于不同的动态库中,它将在您构建的库加载之前预先加载,或者至少在加载依赖它们的函数之前加载。有一个特殊的标志可以用来在共享库中允许未定义的符号 - 我忘了它是什么,但你可以查找它。

答案 1 :(得分:0)

MyApp.cpp中是否定义了MyClass类?

如果没有,您还需要在LOCAL_SRC_FILES中添加MyClass源文件,例如,

LOCAL_SRC_FILES:= MyApp.cpp AClass.cpp。