Mac OS上的Android Ndk编译问题

时间:2012-12-18 12:15:00

标签: android macos android-ndk

在Mac OS Ver 10.6.8上编译我的Native C文件时 - 我收到以下错误

VibhasChandra:com.htp.DrivingRange vibhasc$ /Users/vibhasc/Desktop/myeclipse/android-ndk-r8c/ndk-build 
SharedLibrary  : libndk1.so
dyld: lazy symbol binding failed: Symbol not found: _memmem**

Referenced from: /Users/vibhasc/Desktop/myeclipse/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld
Expected in: /usr/lib/libSystem.B.dylib
dyld: Symbol not found: _memmem**

Referenced from: /Users/vibhasc/Desktop/myeclipse/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld
Expected in: /usr/lib/libSystem.B.dylib

clang: error: unable to execute command: Trace/BPT trap
clang: error: linker command failed due to signal (use -v to see invocation)
make: *** ****[obj/local/armeabi/libndk1.so] Error 254

我知道这可以在linux机器上轻松工作但在Mac中却给出错误......如何解决这个问题? 如何在

中创建dyLib文件

2 个答案:

答案 0 :(得分:0)

一些尝试在OS X上使用R8C的人已经报告过这种情况。在android-ndk列表上this post

建议的解决方法如下:

  

我能够针对这个特定问题想出一个可能的解决方法。我创建了一个实现memmem()的新共享库。我使用DYLD_INSERT_LIBRARIES将memmem.dylib加载到进程中,并使用DYLD_FORCE_FLAT_NAMESPACE = 1让ld在memmem.dylib中找到_memmem而不是libSystem.B.dylib,它要查找它。我不确定是否有任何其他符号需要相同的处理。

我担心它不包含任何细节。

答案 1 :(得分:0)

此问题已在较新版本的Android NDK修订版8d(2012年12月)中得到修复,即android-ndk-r8d版本。

供参考:http://developer.android.com/tools/sdk/ndk/index.html#Revisions

修复信息在这里:

  

使用适用于Mac OS X 10.6.x的NDK 8c版本修复了链接器故障   产生了以下错误:

     
    

dyld:懒惰符号绑定失败:未找到符号:_memmem引用     来自:..... / arm-linux-androideabi / bin / ld预计:     /usr/lib/libSystem.B.dylib

  
     

这个问题是由Mac OS X 10.7构建引起的   与Mac OS 10.6.x和NDK不兼容的二进制文件。

已下载并尝试使用较新的NDK。工作正常。