0%

android 编译 ffmpeg&openssl 的时候报undefined reference to `atexit'的问题

问题

android ffmpeg 添加 https 功能,使用 ndk 和 android-21 编译;
在 链接 ffmpeg 和 openssl 的时候会报如下错误

1
2
libcrypto.a(init.o): In function `ossl_init_register_atexit_ossl_':
init.c:(.text+0x170): undefined reference to `atexit'

分析

1、从android-21 开始,atexit 被从 libc.a 移除;
2、分析openssl代码可知,这行代码也不是非调不可的;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DEFINE_RUN_ONCE_STATIC(ossl_init_register_atexit)
{
#ifdef OPENSSL_INIT_DEBUG
fprintf(stderr, "OPENSSL_INIT: ossl_init_register_atexit()\n");
#endif
#ifndef OPENSSL_SYS_UEFI
# ifdef _WIN32
/* We use _onexit() in preference because it gets called on DLL unload */
if (_onexit(win32atexit) == NULL)
return 0;
# else
if (atexit(OPENSSL_cleanup) != 0)
return 0;
# endif
#endif

return 1;
}

解决办法

定义 OPENSSL_SYS_UEFI 之后再次编译链接,已经不报错了,且 ffmpeg https 功能正常;

1
#define OPENSSL_SYS_UEFI 1

代码路径

https://github.com/hilive/ffmpeg-build

用户的需求就是我的追求!