Android-对cryptopp的未定义引用
我在IOS上成功地编译和执行了Cryptopp,但我确实很难在android上运行它 在这里,我使用的是Cryptopp 5.6.3、NDK r10e和android studio 1.5,我可以通过NDK build成功构建libcryptopp.so,但在通过android studio进行重建时,它克服了许多错误,例如未定义对“vtable for Cryptopp::AutoseedX917RNG”的引用 Android.mk中的Android-对cryptopp的未定义引用,android,c++,android-ndk,crypto++,Android,C++,Android Ndk,Crypto++,我在IOS上成功地编译和执行了Cryptopp,但我确实很难在android上运行它 在这里,我使用的是Cryptopp 5.6.3、NDK r10e和android studio 1.5,我可以通过NDK build成功构建libcryptopp.so,但在通过android studio进行重建时,它克服了许多错误,例如未定义对“vtable for Cryptopp::AutoseedX917RNG”的引用 Android.mk中的 LOCAL_PATH:= $(call my-dir)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := crypt_user
LOCAL_SRC_FILES := crypt_user.cpp
LOCAL_SHARED_LIBRARIES := cryptopp
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := cryptopp
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcryptopp.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
APP_ABI := armeabi
APP_CPPFLAGS += -fexceptions -frtti
APP_STL := stlport_shared
#APP_STL := gnustl_shared
应用程序中的.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := crypt_user
LOCAL_SRC_FILES := crypt_user.cpp
LOCAL_SHARED_LIBRARIES := cryptopp
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := cryptopp
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcryptopp.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
APP_ABI := armeabi
APP_CPPFLAGS += -fexceptions -frtti
APP_STL := stlport_shared
#APP_STL := gnustl_shared
内置。渐变
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
defaultConfig {
applicationId "com.kasbah.jeeva.ndklearning"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk {
moduleName = "crypt_user"
cFlags("-fexceptions")
stl = "stlport_shared"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
debuggable true
jniDebuggable true
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}
在crypt\u user.cpp中
#include <jni.h>
#include "../cryptopp/include/cryptlib.h"
#include "../cryptopp/include/osrng.h"
//using CryptoPP::AutoSeededRandomPool;
using CryptoPP::AutoSeededX917RNG;
#include "../cryptopp/include/aes.h"
using CryptoPP::AES;
#ifdef __cplusplus
extern "C" {
#endif
jlong Java_com_kasbah_jeeva_ndklearning_MainActivity_fun
(JNIEnv* env, jobject o, jint i) {
AutoSeededX917RNG<AES> rng;
long long t = CryptoPP::INFINITE_TIME / i;
return t;
}
#ifdef __cplusplus
}
#endif
#包括
#包括“./cryptopp/include/cryptolib.h”
#包括“./cryptopp/include/osrng.h”
//使用CryptoPP::AutoSeedRandomPool;
使用CryptoPP::AutoseedX917RNG;
#包括“./cryptopp/include/aes.h”
使用CryptoPP::AES;
#ifdef_uucplusplus
外部“C”{
#恩迪夫
jlong Java_com_kasbah_jeeva_ndklearning_main activity_fun
(JNIEnv*env、jobject o、jint i){
自动进料X917RNG
…错误数,如未定义对'vtable for CryptoPP::AutoSeedX917RNG'
使用nm
确保符号存在:
$ arm-linux-androideabi-nm -D --demangle libcryptopp.so | grep AutoSeededX917RNG | sed 's|CryptoPP::||g'
00181ec4 W AutoSeededX917RNG<Rijndael>::IncorporateEntropy(unsigned char const*, unsigned int)
0017d728 W AutoSeededX917RNG<Rijndael>::GenerateIntoBufferedTransformation(BufferedTransformation&, std::string const&, unsigned long long)
00181c18 W AutoSeededX917RNG<Rijndael>::Reseed(unsigned char const*, unsigned int, unsigned char const*, unsigned char const*)
00181ddc W AutoSeededX917RNG<Rijndael>::Reseed(bool, unsigned char const*, unsigned int)
00181e80 W AutoSeededX917RNG<Rijndael>::AutoSeededX917RNG(bool, bool)
00181e80 W AutoSeededX917RNG<Rijndael>::AutoSeededX917RNG(bool, bool)
00169d90 W AutoSeededX917RNG<Rijndael>::~AutoSeededX917RNG()
00169d6c W AutoSeededX917RNG<Rijndael>::~AutoSeededX917RNG()
00169d6c W AutoSeededX917RNG<Rijndael>::~AutoSeededX917RNG()
0017d724 W AutoSeededX917RNG<Rijndael>::CanIncorporateEntropy() const
0023336c D typeinfo for AutoSeededX917RNG<Rijndael>
001fe0bc R typeinfo name for AutoSeededX917RNG<Rijndael>
00232308 V vtable for AutoSeededX917RNG<Rijndael>
GitHub项目使用ndk build
构建良好:
~$ cd Android-PRNG
Android-PRNG$ ndk-build
Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 9 in ./AndroidManifest.xml
[armeabi] Gdbserver : [arm-linux-androideabi-4.8] libs/armeabi/gdbserver
[armeabi] Gdbsetup : libs/armeabi/gdb.setup
[x86] Gdbserver : [x86-4.8] libs/x86/gdbserver
[x86] Gdbsetup : libs/x86/gdb.setup
[mips] Gdbserver : [mipsel-linux-android-4.8] libs/mips/gdbserver
[mips] Gdbsetup : libs/mips/gdb.setup
[armeabi-v7a] Gdbserver : [arm-linux-androideabi-4.8] libs/armeabi-v7a/gdbserver
[armeabi-v7a] Gdbsetup : libs/armeabi-v7a/gdb.setup
[x86_64] Gdbserver : [x86_64-4.9] libs/x86_64/gdbserver
[x86_64] Gdbsetup : libs/x86_64/gdb.setup
[armeabi] Prebuilt : libcryptopp.so <= /usr/local/cryptopp/android-armeabi/lib/
[armeabi] Install : libcryptopp.so => libs/armeabi/libcryptopp.so
[armeabi] Compile++ thumb: prng <= libprng.cpp
[armeabi] Prebuilt : libstlport_shared.so <= /opt/android-ndk-r10d/sources/cxx-stl/stlport/libs/armeabi/
[armeabi] StaticLibrary : libstdc++.a
[armeabi] SharedLibrary : libprng.so
[armeabi] Install : libprng.so => libs/armeabi/libprng.so
[armeabi] Install : libstlport_shared.so => libs/armeabi/libstlport_shared.so
[x86] Prebuilt : libcryptopp.so <= /usr/local/cryptopp/android-x86/lib/
[x86] Install : libcryptopp.so => libs/x86/libcryptopp.so
[x86] Compile++ : prng <= libprng.cpp
[x86] Prebuilt : libstlport_shared.so <= /opt/android-ndk-r10d/sources/cxx-stl/stlport/libs/x86/
[x86] StaticLibrary : libstdc++.a
[x86] SharedLibrary : libprng.so
[x86] Install : libprng.so => libs/x86/libprng.so
[x86] Install : libstlport_shared.so => libs/x86/libstlport_shared.so
[mips] Prebuilt : libcryptopp.so <= /usr/local/cryptopp/android-mips/lib/
[mips] Install : libcryptopp.so => libs/mips/libcryptopp.so
[mips] Compile++ : prng <= libprng.cpp
[mips] Prebuilt : libstlport_shared.so <= /opt/android-ndk-r10d/sources/cxx-stl/stlport/libs/mips/
[mips] StaticLibrary : libstdc++.a
[mips] SharedLibrary : libprng.so
[mips] Install : libprng.so => libs/mips/libprng.so
[mips] Install : libstlport_shared.so => libs/mips/libstlport_shared.so
[armeabi-v7a] Prebuilt : libcryptopp.so <= /usr/local/cryptopp/android-armeabi-v7a/lib/
[armeabi-v7a] Install : libcryptopp.so => libs/armeabi-v7a/libcryptopp.so
[armeabi-v7a] Compile++ thumb: prng <= libprng.cpp
[armeabi-v7a] Prebuilt : libstlport_shared.so <= /opt/android-ndk-r10d/sources/cxx-stl/stlport/libs/armeabi-v7a/
[armeabi-v7a] StaticLibrary : libstdc++.a
[armeabi-v7a] SharedLibrary : libprng.so
[armeabi-v7a] Install : libprng.so => libs/armeabi-v7a/libprng.so
[armeabi-v7a] Install : libstlport_shared.so => libs/armeabi-v7a/libstlport_shared.so
[x86_64] Prebuilt : libcryptopp.so <= /usr/local/cryptopp/android-x86_64/lib/
[x86_64] Install : libcryptopp.so => libs/x86_64/libcryptopp.so
[x86_64] Compile++ : prng <= libprng.cpp
[x86_64] Prebuilt : libstlport_shared.so <= /opt/android-ndk-r10d/sources/cxx-stl/stlport/libs/x86_64/
[x86_64] StaticLibrary : libstdc++.a
[x86_64] SharedLibrary : libprng.so
[x86_64] Install : libprng.so => libs/x86_64/libprng.so
[x86_64] Install : libstlport_shared.so => libs/x86_64/libstlport_shared.so
~$cd安卓PRNG
Android PRNG$ndk构建
Android NDK:警告:应用程序平台Android-14大于./AndroidManifest.xml中的Android:MinsdkVersion9
[armeabi]Gdbserver:[arm-linux-androideabi-4.8]libs/armeabi/Gdbserver
[armeabi]gdb设置:libs/armeabi/gdb.setup
[x86]Gdbserver:[x86-4.8]libs/x86/Gdbserver
[x86]gdb设置:libs/x86/gdb.setup
[mips]Gdbserver:[mipsel-linux-android-4.8]libs/mips/Gdbserver
[mips]gdb设置:libs/mips/gdb.setup
[armeabi-v7a]Gdbserver:[arm-linux-androideabi-4.8]libs/armeabi-v7a/Gdbserver
[armeabi-v7a]gdb设置:libs/armeabi-v7a/gdb.setup
[x86_64]Gdbserver:[x86_64-4.9]libs/x86_64/Gdbserver
[x86_64]gdb设置:libs/x86_64/gdb.setup
[armeabi]预构建:libcryptopp.so libs/armeabi/libcryptopp.so
[armeabi]Compile++thumb:prng libs/armeabi/libstlport_shared.so
[x86]预构建:libcryptopp.so libs/x86/libcryptopp.so
[x86]Compile++:prng libs/x86/libstlport_shared.so
[mips]预构建:libcryptopp.so libs/mips/libcryptopp.so
[mips]Compile++:prng libs/mips/libstlport_shared.so
[Armebi-v7a]预构建:libcryptopp.so libs/armeabi-v7a/libcryptopp.so
[armeabi-v7a]Compile++thumb:prng libs/armeabi-v7a/libstlport_shared.so
[x86_64]预构建:libcryptopp.so libs/x86_64/libcryptopp.so
[x86_64]Compile++:prng libs/x86_64/libstlport_shared.so
我可以通过ndk内置终端成功构建它。但我面临的问题是,当我尝试构建project(build->Rebuild)@user1007302时,它会抛出错误-最好(1)说明您正在执行的确切步骤(以及如何执行),以及(2)请说明您遇到的确切错误消息。到目前为止,这是关于您向我们提供的所有信息:“…错误数,如对{X}的未定义引用…”。您可以通过单击“编辑”将信息添加到问题中。