【问题标题】:OpenSSL libssl.so error undefined reference to 'ssl3_cbc_remove_padding'OpenSSL libssl.so 错误未定义对“ssl3_cbc_remove_padding”的引用
【发布时间】:2014-12-19 17:34:19
【问题描述】:

我目前正在将旧版本的 OpenSSL 修补到最新的稳定 1.0.0o 版本(通过 import_openssl.sh),以便通过 NDK r10c 与 Android 应用程序一起使用。

在构建 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) 所以我有点困惑。

为了清除这些错误,我们将不胜感激任何帮助或以前的经验。如果您需要我进一步详细说明,请询问。

【问题讨论】:

  • 1.0.0 和 1.0.1 是二进制兼容的。为什么不直接使用最新的 1.0.1,避免下层功能问题和补丁问题?
  • 我在尝试构建 0.9.8zc 版本时遇到了同样的问题。出于某种原因,我不得不使用 0.9.8zc 版本。这个问题有什么解决办法吗?另请注意,如果我创建一个独立的 NDK 项目并构建 openssl,那么一切都很好。但是如果我在我的实际项目中嵌入相同的代码,就会出现这个问题。

标签: android-ndk openssl libssl


【解决方案1】:

检查文件(s3_enc.c, t1_enc.c, ssl_lib.c),是否包含在各自的.mk 文件中。在我的情况下,它没有包含在内,所以我只是将这些源文件添加到 ssl/Android.mk 下的 LOCAL_SRC_FILES 部分。

【讨论】:

  • 与我的最终解决方案非常相似,我的 .mk 文件缺少依赖于 s3_enc.c、t1_enc.c 和 ssl_lib.c 进行编译的文件(例如 s3_cbc.c、d1_*.c 等)。手动添加它们,然后接缝就可以了。
猜你喜欢
  • 2012-05-29
  • 1970-01-01
  • 2012-08-14
  • 2016-10-03
  • 2011-08-07
  • 2017-03-31
  • 2021-09-07
  • 2012-02-27
  • 2012-03-12
相关资源
最近更新 更多