使用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,否则无法更新这个文件,而且也没有任何提示。
1219

被折叠的 条评论
为什么被折叠?



