交叉编译记录
跳转到导航
跳转到搜索
本页记录各软件交叉编译时要注意的事项。没有特别说明的均为 autotools 或者兼容的方法:
../configure --host=arm-unknown-linux-gnueabi ....
make
make DESTDIR=xxx install
zsh
如果--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__MKTEMP
Src/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
htop
path+=/ldata/DATA/soft/arm-lilydjwg-linux-gnueabi/bin
mkdir android-build && cd android-build
CFLAGS='-I/ldata/DATA/android/ncurses-6.0/system/include -I/ldata/DATA/android/ncurses-6.0/system/include/ncurses -mfloat-abi=hard' LDFLAGS='-L/ldata/DATA/android/ncurses-6.0/system/lib' ../configure --host=arm-lilydjwg-linux-gnueabi --prefix=/system --bindir=/system/xbin
make
# 改成静态链接
lsof
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
dig, host, nslookup
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#交叉编译。
ncurses
path+=/ldata/DATA/soft/arm-lilydjwg-linux-gnueabi/bin
../configure --host=arm-lilydjwg-linux-gnueabi --with-shared --with-normal --without-debug --without-ada --enable-pc-files --enable-widec --without-manpages --prefix=/system
make
make DESTDIR=/ldata/DATA/android/ncurses-6.0 install
记得复制需要的 terminfo 文件。
注意安装的 pkgconfig 文件位于 /usr/lib
下,需要手动移动。
或者使用 Android NDK:
CC='aarch64-linux-android-gcc --sysroot=/opt/android-ndk/platforms/android-23/arch-arm64 -pie -fpie -fPIE -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 --with-shared --with-normal --without-debug --without-ada --enable-pc-files --enable-widec --without-manpage
libxslt
../configure --host=arm-dyne-linux-gnueabi --without-python --without-crypto
SQLite3
../configure --host=arm-lilydjwg-linux-gnueabi --disable-tcl
file
../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