Hi3516D/Hi3519D平台交叉编译live555动态库实践记录

使用musl编译器,仅供参考

安装zlib

wget https://zlib.net/zlib-1.2.13.tar.gz

export SDK_ROOT=/opt/linux/x86-arm/aarch64-v01c01-linux-musl-gcc
export SDKTARGETSYSROOT=$SDK_ROOT/target
export PATH=$SDK_ROOT/bin:$PATH

export CC="/opt/linux/x86-arm/aarch64-v01c01-linux-musl-gcc/bin/aarch64-linux-musl-gcc"
export CFLAGS="-I$SDKTARGETSYSROOT/usr/include -L$SDKTARGETSYSROOT/usr/lib"
export CXX="/opt/linux/x86-arm/aarch64-v01c01-linux-musl-gcc/bin/aarch64-linux-musl-g++"

export CXXFLAGS="-I$SDKTARGETSYSROOT/usr/include -L$SDKTARGETSYSROOT/usr/lib"
export CPPFLAGS="-I$SDKTARGETSYSROOT/usr/include -L$SDKTARGETSYSROOT/usr/lib"

export CC="/opt/linux/x86-arm/aarch64-v01c01-linux-musl-gcc/bin/aarch64-linux-musl-gcc"
export CXX="/opt/linux/x86-arm/aarch64-v01c01-linux-musl-gcc/bin/aarch64-linux-musl-g++"
export CPP="/opt/linux/x86-arm/aarch64-v01c01-linux-musl-gcc/bin/aarch64-linux-musl-gcc -E"
export LD="/opt/linux/x86-arm/aarch64-v01c01-linux-musl-gcc/bin/aarch64-linux-musl-ld"

export STRIP=$SDK_ROOT/bin/aarch64-linux-musl-strip
export RANLIB=$SDK_ROOT/bin/aarch64-linux-musl-ranlib
export AR=$SDK_ROOT/bin/aarch64-linux-musl-ar
export AS=$SDK_ROOT/bin/aarch64-linux-musl-as
export AWK=''

安装openssl

./Configure --prefix=$(pwd)/output CC="/opt/linux/x86-arm/aarch64-v01c01-linux-musl-gcc/bin/aarch64-linux-musl-gcc"

需要手动把makefile中的-m64删除

拷贝so和h文件,还需要拷贝include/openssl整个目录到sysroot/include。如果不放到sysroot,后面编译live555时需要指定头文件和库文件的位置。

 cp -r /root/shared/openssl/output/include/*  /root/shared/openssl/output/include
 cp -r /root/shared/openssl/output/include/*  $SDKTARGETSYSROOT/usr/include
 cp -r /root/shared/openssl/output/lib64/*.so*  $SDKTARGETSYSROOT/usr/lib
 cp -r /root/shared/zlib-1.3.1/output/lib/*.so*  $SDKTARGETSYSROOT/usr/lib
 cp -r /root/shared/zlib-1.3.1/output/include/*  $SDKTARGETSYSROOT/usr/include

安装Live555

源码包:Index of /liveMedia/public

live555的安装方式和一般的有点不同,首先是执行./configure --help时会提示:

./configure --help
Whoa! This software distribution does NOT use the normal Unix "configure" mechanism for generating a Makefile.  For instructions on how to build this software, see <http://www.live555.com/liveMedia/>.
Also, please make sure that you're using the most up-to-date version of the source code - available from <http://www.live555.com/liveMedia/public/>.

根据这个这个网站的提示,使用该方式生成Makefile:

./genMakefiles armlinux

但是根据目标板的实际情况,需要先修改armlinux的配置文件:

  • 依赖openssl,需要指定ssl的include目录

  • LINK_OPTS 指定openssl动态库路径

  • 为避免编译错误,COMPILE_OPTS增加-DNO_STD_LIB

CROSS_COMPILE?=         aarch64-linux-musl-
COMPILE_OPTS =          $(INCLUDES) -I/usr/local/include -I/root/shared/openssl/include -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -DNO_STD_LIB -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
C =                     c
C_COMPILER =            $(CROSS_COMPILE)gcc
C_FLAGS =               $(COMPILE_OPTS)
CPP =                   cpp
CPLUSPLUS_COMPILER =    $(CROSS_COMPILE)g++
CPLUSPLUS_FLAGS =       $(COMPILE_OPTS) -Wall -DBSD=1
OBJ =                   o
LINK =                  $(CROSS_COMPILE)g++ -o
LINK_OPTS =              -L/root/shared/openssl/output/lib64
CONSOLE_LINK_OPTS =     $(LINK_OPTS)
LIBRARY_LINK =          $(CROSS_COMPILE)ar cr
LIBRARY_LINK_OPTS =     $(LINK_OPTS)
LIB_SUFFIX =                    a
LIBS_FOR_CONSOLE_APPLICATION = -lssl -lcrypto
LIBS_FOR_GUI_APPLICATION =
EXE =PLICATION =
EXE =

不添加-DNO_STD_LIB时的编译错误:

BasicTaskScheduler.cpp:191:40: error: 'struct std::atomic_flag' has no member named 'test'

然后make install DESTDIR=/想要的目录,此时生成的是静态库
要生成动态链接库,参考config.linux-with-shared-libraries,经过整理,配置文件改为:

# 'CURRENT':'REVISION':'AGE' are updated - whenever a library changes - as follows:
# The library code changes, but without any changes to the API (i.e., interfaces) => increment REVISION
# At least one interface changes, or is removed => CURRENT += 1; REVISION = 0; AGE = 0
# One or more interfaces were added, but no existing interfaces were changed or removed => CURRENT += 1; REVISION = 0; AGE += 1

libliveMedia_VERSION_CURRENT=117
libliveMedia_VERSION_REVISION=0
libliveMedia_VERSION_AGE=0
libliveMedia_LIB_SUFFIX=so.$(shell expr $(libliveMedia_VERSION_CURRENT) - $(libliveMedia_VERSION_AGE)).$(libliveMedia_VERSION_AGE).$(libliveMedia_VERSION_REVISION)

libBasicUsageEnvironment_VERSION_CURRENT=3
libBasicUsageEnvironment_VERSION_REVISION=0
libBasicUsageEnvironment_VERSION_AGE=1
libBasicUsageEnvironment_LIB_SUFFIX=so.$(shell expr $(libBasicUsageEnvironment_VERSION_CURRENT) - $(libBasicUsageEnvironment_VERSION_AGE)).$(libBasicUsageEnvironment_VERSION_AGE).$(libBasicUsageEnvironment_VERSION_REVISION)

libUsageEnvironment_VERSION_CURRENT=5
libUsageEnvironment_VERSION_REVISION=0
libUsageEnvironment_VERSION_AGE=2
libUsageEnvironment_LIB_SUFFIX=so.$(shell expr $(libUsageEnvironment_VERSION_CURRENT) - $(libUsageEnvironment_VERSION_AGE)).$(libUsageEnvironment_VERSION_AGE).$(libUsageEnvironment_VERSION_REVISION)

libgroupsock_VERSION_CURRENT=32
libgroupsock_VERSION_REVISION=0
libgroupsock_VERSION_AGE=2
libgroupsock_LIB_SUFFIX=so.$(shell expr $(libgroupsock_VERSION_CURRENT) - $(libgroupsock_VERSION_AGE)).$(libgroupsock_VERSION_AGE).$(libgroupsock_VERSION_REVISION)
#####
CROSS_COMPILE?=         aarch64-linux-musl-
COMPILE_OPTS =          $(INCLUDES) -I/usr/local/include -I/root/shared/openssl/include -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -DNO_STD_LIB -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -fPIC
C =                     c
C_COMPILER =            $(CROSS_COMPILE)gcc
C_FLAGS =               $(COMPILE_OPTS)
CPP =                   cpp
CPLUSPLUS_COMPILER =    $(CROSS_COMPILE)g++
CPLUSPLUS_FLAGS =       $(COMPILE_OPTS) -Wall -DBSD=1
OBJ =                   o
LINK =                  $(CROSS_COMPILE)g++ -o
LDFLAGS +=              -L/root/shared/openssl/output/lib64
LINK_OPTS =             -L. $(LDFLAGS)
CONSOLE_LINK_OPTS =     $(LINK_OPTS)
LIBRARY_LINK =          $(CROSS_COMPILE)gcc -o
SHORT_LIB_SUFFIX =      so.$(shell expr $($(NAME)_VERSION_CURRENT) - $($(NAME)_VERSION_AGE))
LIB_SUFFIX =            $(SHORT_LIB_SUFFIX).$($(NAME)_VERSION_AGE).$($(NAME)_VERSION_REVISION)
LIBRARY_LINK_OPTS =     -shared -Wl,-soname,$(NAME).$(SHORT_LIB_SUFFIX) $(LDFLAGS)
LIBS_FOR_CONSOLE_APPLICATION = -lssl -lcrypto
LIBS_FOR_GUI_APPLICATION =
LIBS_FOR_LIVEMEDIA_LIB = -lssl -lcrypto
EXE =
INSTALL2 =              install_shared_libraries

这个文件可以自己起名字,比如config.aarch64-linux-musl-shared,然后生成Makefile的时候执行./genMakefile aarch64-linux-musl-shared就可以了。
有一个要注意的是Makefile是所有用户只读的(-r–r–r–),如果想重新生成Makefile可以先删除Makefile,否则无法更新这个文件,而且也没有任何提示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值