这里我试图通过ndk-build构建libcryptopp.a,但是我收到错误,如下所示。
Android.mk
Application.mk
setenv-android.sh使用cryptopp 5.6.3创建libcryptopp.a和.so时
终端产生错误,如下所示
$ / Users / kasbahapple / Documents / AndroidDocs / AndroidADT / adt-bundle-mac-x86_64-20140702 / sdk / ndk-bundle / ndk-build
[armeabi] Gdbserver:[arm-linux-androideabi-4.8] libs / armeabi / gdbserver
[armeabi] Gdbsetup:libs / armeabi / gdb.setup
[armeabi-v7a] Gdbserver:[arm-linux-androideabi-4.8] libs / armeabi-v7a / gdbserver
[armeabi-v7a] Gdbsetup:libs / armeabi-v7a / gdb.setup
[x86] Gdbserver:[x86-4.8] libs / x86 / gdbserver
[x86] Gdbsetup:libs / x86 / gdb.setup
[armeabi]可执行文件:source_file
/Users/kasbahapple/Documents/AndroidDocs/AndroidADT/adt-bundle-mac-x86_64-20140702/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/ .. /lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld:错误:jni / nativelib / libcryptopp.a:无归档符号表(运行ranlib)
/Users/kasbahapple/Documents/AndroidDocs/AndroidADT/adt-bundle-mac-x86_64-20140702/sdk/ndk-bundle/platforms/android-8/arch-arm/usr/lib/crtbegin_dynamic.o:crtbrand。 c:function _start:error:对'main'的未定义引用
collect2:错误:ld返回1退出状态
我真的很难通过NDK构建c ++静态库。
我正在寻找解决方案。如果我做错了,请给我一个完整的步骤。
答案 0 :(得分:2)
通过ndk-build构建libcryptopp.a时没有归档符号表(运行ranlib)
通过 Android.mk
构建Crypto ++库后,您需要在ranlib
上运行libcryptopp.a
。不幸的是,我不知道how to tell Android.mk
to run ranlib。
我猜测 - 这纯粹是猜测 - 你必须在Android.mk中分两步完成。你不能切入追逐并直接从源构建共享对象。
libcryptopp.a
,正在运行ranlib
libcryptopp.so
libcryptopp.a
setenv-android.sh使用cryptopp 5.6.3 创建libcryptopp.a和.so时 ...
APP_STL = gnustl_static
脚本setenv-android.sh
使用STLport是因为GNU许可保留。您的Android.mk
使用GNU的STL。
您可能也应该使用相同的C ++运行时库。此外,所有库必须使用相同的运行时。这意味着OpenGL,Crypto ++,[Favorite library]必须使用相同的C ++运行时,并且没有混合和匹配。此外,由于多个库正在使用C ++运行时,因此必须使用共享对象,而不是静态版本。
在NDK的某个地方讨论它的自述文件。我认为它叫做CPP-README或类似的。
此外,当您调用setenv-android.sh
时, 必须 包含一个前导点。然后运行GNUmakefile-cross
:
. ./setenv-android.sh
make -f GNUmakefile-cross static dynamic cryptest.exe
最后,请不要发布图片。我几乎看不懂它们,因为我的眼睛已经老了。通常,安抚一个用户并不重要。在这种情况下,我是那个编写脚本和wiki页面的人,所以你想让我很容易,而不是对我很难:)