2015-12-02 68 views
1

這裏我試圖通過ndk-build構建libcryptopp.a,但是我得到如下所示的錯誤。通過ndk-build構建libcryptopp.a時沒有壓縮符號表(運行ranlib)

Android.mk

enter image description here

Application.mk

enter image description here

setenv-android.sh其同時通過使用cryptopp 5.6.3

創建libcryptopp.a和.so

enter image description here

0123在終端產生如下

$ /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] Executable : 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: error: jni/nativelib/libcryptopp.a: no archive symbol table (run 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: undefined reference to 'main'

collect2: error: ld returned 1 exit status

我確實掙扎通過NDK構建C++靜態庫

錯誤。

我正在尋找解決方案。如果我做錯了,請給我一個完整的步驟。

+0

你/你解決了這個問題嗎?我也需要幫助。 –

回答

1

no archive symbol table (run ranlib) while building libcryptopp.a through ndk-build

後您通過構建Android.mk的加密++庫,您需要在libcryptopp.a運行ranlib。不幸的是,我不知道how to tell Android.mk to run ranlib

我猜 - - 它純粹是一個猜測 - 你必須在Android.mk的兩個步驟做到這一點。您不能切入追逐並直接從源創建共享對象。

  • 構建libcryptopp.a,從libcryptopp.a

setenv-android.sh its while creating libcryptopp.a and .so by using cryptopp 5.6.3
...
APP_STL = gnustl_static

腳本setenv-android.sh運行ranlib

  • 構建libcryptopp.so使用的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 
    

    最後,請不要張貼圖片。我幾乎看不懂他們,因爲我的眼睛老舊。通常,安撫一個用戶並不重要。在這種情況下,我是寫這些腳本和維基頁面的人,所以你想讓我容易,而不是對我很難:)