交叉编译记录
跳转到导航
跳转到搜索
本页记录各软件交叉编译时要注意的事项。没有特别说明的均为 autotools 或者兼容的方法:
../configure --host=arm-unknown-linux-gnueabi ....
make
make DESTDIR=xxx install
如果--enable-pcre而-lpcre失败,config.h将会是错误的。
使用 Android NDK 编译的话,中文显示异常。
LDFLAGS=-L/ldata/media/temp/android/installed_binaries/lib \
CC='arm-linux-androideabi-gcc --sysroot=/opt/android-ndk/platforms/android-14/arch-arm' \
./configure --host=arm-linux-gnu --prefix=/system --with-term-lib=ncurses \
--disable-multibyte --bindir=/system/xbin
修改:
Src/init.c关于TIOCSETD的代码注释掉,不然程序会卡在这个 ioctl 调用上config.h注释掉HAVE__MKTEMPSrc/signal.c:432,WCONTINUED改成WSTOPPED,不然恢复挂起的进程时会失败,得到「unknown signal」的提示
最后可将 ncurses 静态链接进去:
arm-linux-androideabi-gcc --sysroot=/opt/android-ndk/platforms/android-14/arch-arm \
-L/ldata/media/temp/android/installed_binaries/lib -rdynamic \
-o zsh main.o `cat stamp-modobjs` -ldl -lm -lc /ldata/media/temp/android/installed_binaries/lib/libncurses.a
2024年11月08日。
path+=/ldata/HUGE/android-toolchain-28/bin
mkdir android-build && cd android-build
CFLAGS=-I/home/lilydjwg/soft/android/binaries/aarch64/ncurses-6.5/usr/include LDFLAGS=-L/home/lilydjwg/soft/android/binaries/aarch64/ncurses-6.5/usr/lib ../configure --host=aarch64-linux-android --enable-delayacct=no --enable-affinity=no --enable-unwind=no
# 把 HAVE_EXECINFO_H 定义去掉
make
path+=/ldata/txtfiles/soft/arm-lilydjwg-linux-gnueabi/bin
LSOF_CC=arm-lilydjwg-linux-gnueabi-gcc LSOF_CFGF='-DHAS_STRFTIME -DHASNORPC_H -DGLIBCV' LSOF_VERS=3.0.8 ./Configure -n linux
make
arm-lilydjwg-linux-gnueabi-gcc -o lsof -static dfile.o dmnt.o dnode.o dproc.o dsock.o dstore.o arg.o main.o misc.o node.o print.o proc.o store.o usage.o util.o -L./lib -llsof
arm-lilydjwg-linux-gnueabi-strip lsof
path+=/opt/android-ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin
BUILD_CC=gcc \
CC='arm-linux-androideabi-gcc --sysroot=/opt/android-ndk/platforms/android-18/arch-arm' \
CXX='arm-linux-androideabi-g++ --sysroot=/opt/android-ndk/platforms/android-18/arch-arm' \
../configure --host=arm-linux-gnu --prefix=/system --bindir=/system/xbin \
--enable-epoll --without-openssl --without-gssapi --disable-static --with-randomdev=/dev/urandom
zlib
CHOST=arm-dyne-linux-gnueabi ./configure
make DESTDIR=/ldata/media/temp/kindle/software/zlib-1.2.8 install
openssl
CC=arm-dyne-linux-gnueabi-gcc LD=arm-dyne-linux-gnueabi-ld AR=arm-dyne-linux-gnueabi-ar RANLIB=arm-dyne-linux-gnueabi-ranlib ./Configure shared linux-armv4
make
# install 目标会安装一堆文档
make INSTALL_PREFIX=/ldata/media/temp/kindle/software/openssl-1.0.1e install_sw
Python
参见 Python#交叉编译。
2024年11月08日。使用 Android NDK(这里故意没有编译动态库,只有静态库):
path+=/ldata/HUGE/android-toolchain-28/bin
../configure --host=aarch64-linux-android --without-manpages --without-progs --without-tests
make DESTDIR=~/soft/android/binaries/aarch64/ncurses-6.5 install
记得复制需要的 terminfo 文件。
libxslt
../configure --host=arm-dyne-linux-gnueabi --without-python --without-crypto
../configure --host=arm-lilydjwg-linux-gnueabi --disable-tcl
../configure --host=arm-lilydjwg-linux-gnueabi --enable-static --bindir=/system/xbin --prefix=/system
make
cd src
arm-lilydjwg-linux-gnueabi-gcc -static -std=gnu99 -fvisibility=hidden -O2 -o file file.o .libs/libmagic.a
arm-linux-androideabi-strip file
# then use file and magic.mgc
# magic.mgc must be in /system/share/misc/
使用 Android NDK 时可能会报链接错误。
tinyssh
参见主条目tinyssh。
tcpdump
先编译 pcap 库:
CC='aarch64-linux-android-gcc --sysroot=/opt/android-ndk/platforms/android-23/arch-arm64 -pie -fpie -fPIE -I/opt/android-ndk/sysroot/usr/include' ../configure --host=aarch64-linux-android --prefix=/system --bindir=/system/xbin --with-pcap=linux
然后编译 tcpdump 本身:
CC='aarch64-linux-android-gcc --sysroot=/opt/android-ndk/platforms/android-23/arch-arm64 -pie -fpie -fPIE -I/home/lilydjwg/soft/android/binaries/aarch64-prefix/system/include -L/home/lilydjwg/soft/android/binaries/aarch64-prefix/system/lib -I/opt/android-ndk/sysroot/usr/include' LDFLAGS=-L/opt/android-ndk/platforms/android-23/arch-arm64/lib ../configure --host=aarch64-linux-android --prefix=/system --bindir=/system/xbin
最后修改最后一步链接的参数,把 -lpcap 改为 -Wl,-static -lpcap -Wl,-dy