2014-12-19 54 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