2011-12-16 12 views
0

私はAndroid用OpenSSL(ndk-buildを使用)をビルドし、それを私のプログラムにリンクしました。コンパイルとリンクは動作しますが、実行時エラーUnsatisfiedLinkErrorが発生します。 具体的には、このコードでプログラムブレーク:Android用のsslをUnsatifiedLinkErrorに読み込むことができません

public class TestActivity extends Activity 
{  // load the library - name matches jni/Android.mk 
    static {  
     System.loadLibrary("crypto2"); 
     System.loadLibrary("ssl2"); // <=BREAKS HERE! 
     System.loadLibrary("Test"); 
     } 

SSL2をロードする際には、具体的壊れるので、crypto2をロードすることができたそうです。 私はssl2にcryto2を使用するように伝える必要があると思います。私はAndroid.mkファイルでそれを試みましたが、それは役に立たなかった。

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := libcrypto2 
LOCAL_SRC_FILES := OpenSSL/libcrypto2.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := libssl2 
LOCAL_SRC_FILES := OpenSSL/libssl2.so 
LOCAL_SHARED_LIBRARIES := libcrypto2 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) # Here we give our module name and source file(s) 
LOCAL_C_INCLUDES := D:/DevelopTools/OpenSSL-WIN32/include $(LOCAL_PATH)/../../../Framework/Applications/FW2Prototype $(LOCAL_PATH)/../../../Graphics/Libraries/Common $(LOCAL_PATH)/../../../Input/Libraries/Common $(LOCAL_PATH)/../../../Audio/Libraries/Common $(LOCAL_PATH)/../../../Audio/Libraries/NullAudio $(LOCAL_PATH)/../../../Network/Libraries/Common 
LOCAL_MODULE := Test 
LOCAL_SRC_FILES := Test.cpp Reference.cpp JNINetwork.cpp JNIGraphics2D.cpp JNIInput.cpp JNIAudio.cpp Applications/FatalWars2/FatalWars2.cpp /../../../Audio/Libraries/NullAudio/NullAudio.cpp 
LOCAL_SHARED_LIBRARIES := libcrypto2 libssl2 
include $(BUILD_SHARED_LIBRARY) 

何が悪いと思いますか?

ありがとう、

+0

なぜ[javax.net.ssl](http://developer.android.com/reference/javax/net/ssl/package-summary.html)を使用しないのですか?それは内蔵されています。 – kichik

+0

これは可能ですが、すでにネイティブオプションを使用する方が簡単だと思っていました。 – user1097185

答えて

0

私はこれを "解決"しました。 私は単純にopensslを1つのsoファイルに構築しました。私はcryptoとsslの両方を静的に構築したので、sslの暗号依存性は静的リンクの中に隠されていました。 問題は、別のビルド済み共有ライブラリ(暗号)に依存していたため、あらかじめ作成された共有ライブラリsslを読み込めなかったことが明らかです。多分このようなライブラリをロードすることは可能ですが、私の解決策は静的なリンク暗号だけをsslにしてから、opensslという共有ライブラリにしました。

+0

opensslライブラリの変更点を少し正確に説明できますか?私はまだ同じunsatisfiedlinkerrorで立ち往生しています... – shein

+0

私は2つの静的ライブラリをリンクするためにこれらを使用し、それらを静的にするためにこれらのlibのAndroid.mkファイルを修正しました。 LOCAL_WHOLE_STATIC_LIBRARIES + = libcrypto-static libssl-static 残念ながら私はあまりよく覚えていません。また、ウィンドウでコマンドラインに長すぎる引数が付いている可能性があります。私は結局、Linuxクラウドを借りてそこに構築したと思う。同じことがcryptoとsslが静的である場合にも当てはまります。 – user1097185