2014-12-19 52 views
1

我目前正在將一箇舊版本的OpenSSL修補到最新的穩定1.0.0o版本(通過import_openssl.sh),以便通過NDK r10c與Android應用程序一起使用。OpenSSL libssl.so錯誤未定義引用'ssl3_cbc_remove_padding'

在構建libssl.so共享庫時,出現以下錯誤。

[armeabi] SharedLibrary : libssl.so 
jni/openssl/ssl/s3_enc.c:542: error: undefined reference to 'ssl3_cbc_remove_padding' 
jni/openssl/ssl/s3_enc.c:739: error: undefined reference to 'ssl3_cbc_record_digest_supported' 
jni/openssl/ssl/s3_enc.c:764: error: undefined reference to 'ssl3_cbc_digest_record' 
jni/openssl/ssl/s3_pkt.c:464: error: undefined reference to 'ssl3_cbc_copy_mac' 
jni/openssl/ssl/t1_enc.c:763: error: undefined reference to 'tls1_cbc_remove_padding' 
jni/openssl/ssl/t1_enc.c:919: error: undefined reference to 'ssl3_cbc_record_digest_supported' 
jni/openssl/ssl/t1_enc.c:925: error: undefined reference to 'ssl3_cbc_digest_record' 
jni/openssl/ssl/ssl_lib.c:1058: error: undefined reference to 'dtls1_min_mtu' 

以例如第一錯誤,我可以看到在文件s3_enc.c(https://github.com/openssl/openssl/blob/OpenSSL_1_0_0-stable/ssl/s3_enc.c)到功能「ssl3_cbc_remove_padding」,但實際功能的引用無處可看出,只有在ssl_locl的原型。 h(https://github.com/openssl/openssl/blob/OpenSSL_1_0_0-stable/ssl/ssl_lib.c)所以我有點困惑。

任何幫助或以前的經驗將不勝感激,以清除這些錯誤。如果您需要我進一步闡述,請詢問。

+0

1.0.0和1.0.1是二進制兼容的。爲什麼不使用最新的1.0.1並避免低級功能問題和修補問題? – jww

+0

我在試圖構建0.9.8zc版本時遇到了同樣的問題。出於某種原因,我不得不使用0.9.8zc版本。有沒有解決這個問題的方法?另外請注意,如果我創建一個獨立的NDK項目並構建openssl,那麼一切都很好。但是,如果我在我的實際項目中嵌入相同的代碼,則會發生此問題。 – gmuhammad

回答

1

檢查文件(s3_enc.c, t1_enc.c, ssl_lib.c),是否包含在其各自的.mk文件中。在我的情況下,它沒有包括在內,所以我只需在ssl/Android.mk下的LOCAL_SRC_FILES部分添加這些源文件。

+0

與我的最終解決方案非常相似,我的.mk文件缺少依賴於s3_enc.c,t1_enc.c和ssl_lib.c進行編譯的文件(例如s3_cbc.c,d1 _ *。c等)。手動添加它們,並將其用於訣竅。 – azza50