/*********************************************************************
* Author : lile
* Modified : 2019年12月28日星期六 10:16:13
* Email : roger0212@163.com
* HomePage : lile777.blog.csdn.net
* CopyRight : 该文章版权由lile所有。
* 保留本版权声明的前提下,可在非商业目的下任意传播和复制。
* 对于商业目的下对本文的任何行为需经作者同意。
*********************************************************************/
root@ubuntu:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty
root@ubuntu:~# cat /proc/version
Linux version 4.4.0-31-generic (buildd@lgw01-43) (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ) #50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016
root@ubuntu:~# file /bin/busybox
/bin/busybox: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=ae3cf83d83d4ed554fa7ba6d5f2b17c92c362710, stripped
root@ubuntu:~#
root@ubuntu:~# aarch64-himix100-linux-gcc -v
Using built-in specs.
COLLECT_GCC=aarch64-himix100-linux-gcc
COLLECT_LTO_WRAPPER=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/host_bin/../libexec/gcc/aarch64-linux-gnu/6.3.0/lto-wrapper
Target: aarch64-linux-gnu
Configured with: /home/sying/SDK_CPU_UNIFIED/build/script/aarch64-himix100-linux/aarch64_himix100_build_dir/src/gcc-6.3.0/configure --build=i386-redhat-linux --host=i386-redhat-linux --target=aarch64-linux-gnu --with-arch=armv8-a --prefix=/home/sying/SDK_CPU_UNIFIED/build/script/aarch64-himix100-linux/aarch64_himix100_build_dir/install --with-specs='%{!ftree-coalesce-vars:-fno-tree-coalesce-vars}' --disable-libmudflap --disable-libssp --enable-gold=yes --disable-libstdcxx-pch --disable-multilib --enable-multiarch --with-gnu-as --with-gnu-ld --enable-libgomp --enable-gnu-indirect-function --enable-checking=yes --enable-lto --enable-c99 --enable-long-long --disable-nls --enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 --enable-shared --with-pkgversion='HC&C V100R002C00B027_20181107' --enable-languages=c,c++ --with-headers=/home/sying/SDK_CPU_UNIFIED/build/script/aarch64-himix100-linux/aarch64_himix100_build_dir/install/target/usr/include --with-sysroot=/home/sying/SDK_CPU_UNIFIED/build/script/aarch64-himix100-linux/aarch64_himix100_build_dir/install/target --with-build-sysroot=/home/sying/SDK_CPU_UNIFIED/build/script/aarch64-himix100-linux/aarch64_himix100_build_dir/install/target --with-gmp=/home/sying/SDK_CPU_UNIFIED/build/script/aarch64-himix100-linux/aarch64_himix100_build_dir/obj/host-libs/usr --with-mpfr=/home/sying/SDK_CPU_UNIFIED/build/script/aarch64-himix100-linux/aarch64_himix100_build_dir/obj/host-libs/usr --with-mpc=/home/sying/SDK_CPU_UNIFIED/build/script/aarch64-himix100-linux/aarch64_himix100_build_dir/obj/host-libs/usr --with-cloog=/home/sying/SDK_CPU_UNIFIED/build/script/aarch64-himix100-linux/aarch64_himix100_build_dir/obj/host-libs/usr --with-build-time-tools=/home/sying/SDK_CPU_UNIFIED/build/script/aarch64-himix100-linux/aarch64_himix100_build_dir/install/aarch64-linux-gnu/bin --libdir=/home/sying/SDK_CPU_UNIFIED/build/script/aarch64-himix100-linux/aarch64_himix100_build_dir/install/lib
Thread model: posix
gcc version 6.3.0 (HC&C V100R002C00B027_20181107)
https://github.com/dkogan/ltrace
https://src.fedoraproject.org/repo/pkgs/ltrace/?C=M;O=D
http://www.zlib.net/fossils/
https://sourceware.org/elfutils/ftp/0.178/
time CC=aarch64-himix100-linux-gcc LD=aarch64-himix100-linux-ld RANLIB=aarch64-himix100-linux-ranlib AR=aarch64-himix100-linux-ar ./configure --prefix=/opt/files/release/zlib/aarch64/
make
make install
root@ubuntu:/opt/files/zlib-1.2.11# tree /opt/files/release/zlib/aarch64/
/opt/files/release/zlib/aarch64/
├── include
│ ├── zconf.h
│ └── zlib.h
├── lib
│ ├── libz.a
│ ├── libz.so -> libz.so.1.2.11
│ ├── libz.so.1 -> libz.so.1.2.11
│ ├── libz.so.1.2.11
│ └── pkgconfig
│ └── zlib.pc
└── share
└── man
└── man3
└── zlib.3
6 directories, 8 files
time CC=aarch64-himix100-linux-gcc LD=aarch64-himix100-linux-ld RANLIB=aarch64-himix100-linux-ranlib AR=aarch64-himix100-linux-ar LDFLAGS='-L/opt/files/release/zlib/aarch64/lib' ./configure --host=aarch64-himix100-linux --prefix=/opt/files/release/elfutils/aarch64/ --disable-debuginfod
time make -w CFLAGS+='-I/opt/files/release/zlib/aarch64/include' LDFLAGS="-Wl,-rpath-link,/opt/files/release/zlib/aarch64/lib -L/opt/files/release/zlib/aarch64/lib"
time make install
root@ubuntu:/opt/files/elfutils-0.178# tree /opt/files/release/elfutils/aarch64/lib/
/opt/files/release/elfutils/aarch64/lib/
├── libasm-0.178.so
├── libasm.a
├── libasm.so -> libasm.so.1
├── libasm.so.1 -> libasm-0.178.so
├── libdw-0.178.so
├── libdw.a
├── libdw.so -> libdw.so.1
├── libdw.so.1 -> libdw-0.178.so
├── libelf-0.178.so
├── libelf.a
├── libelf.so -> libelf.so.1
├── libelf.so.1 -> libelf-0.178.so
└── pkgconfig
├── libdebuginfod.pc
├── libdw.pc
└── libelf.pc
1 directory, 15 files
root@ubuntu:/opt/files/ltrace-0.7.91# bash autogen.sh
----------
autoreconf
----------
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force --warnings=all -I config/m4
autoreconf: configure.ac: tracing
autoreconf: running: libtoolize --copy --force
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `config/autoconf'.
libtoolize: copying file `config/autoconf/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `config/m4'.
libtoolize: copying file `config/m4/libtool.m4'
libtoolize: copying file `config/m4/ltoptions.m4'
libtoolize: copying file `config/m4/ltsugar.m4'
libtoolize: copying file `config/m4/ltversion.m4'
libtoolize: copying file `config/m4/lt~obsolete.m4'
autoreconf: running: /usr/bin/autoconf --force --warnings=all
autoreconf: running: /usr/bin/autoheader --force --warnings=all
autoreconf: running: automake --add-missing --copy --force-missing --warnings=all
configure.ac:56: installing 'config/autoconf/compile'
configure.ac:32: installing 'config/autoconf/config.guess'
configure.ac:32: installing 'config/autoconf/config.sub'
configure.ac:59: installing 'config/autoconf/install-sh'
configure.ac:59: installing 'config/autoconf/missing'
Makefile.am: installing 'config/autoconf/depcomp'
testsuite/Makefile.am:29: warning: user variable 'RUNTESTDEFAULTFLAGS' defined here ...
/usr/share/automake-1.14/am/dejagnu.am: ... overrides Automake variable 'RUNTESTDEFAULTFLAGS' defined here
autoreconf: Leaving directory `.'
--------
Finished
--------
root@ubuntu:/opt/files/ltrace-0.7.91#
time ./configure --prefix=/opt/files/release/ltrace/x86_64
time make CFLAGS+='-Wno-unused-local-typedefs'
time make install
root@ubuntu:/opt/files/ltrace-0.7.3# tree /opt/files/release/ltrace/x86_64
/opt/files/release/ltrace/x86_64
├── bin
│ └── ltrace
├── etc
│ └── ltrace.conf
└── share
├── doc
│ └── ltrace
│ ├── COPYING
│ ├── CREDITS
│ ├── INSTALL
│ ├── README
│ └── TODO
└── man
├── man1
│ └── ltrace.1
└── man5
└── ltrace.conf.5
8 directories, 9 files
root@ubuntu:/opt/files/ltrace-0.7.3# file /opt/files/release/ltrace/x86_64/bin/ltrace
/opt/files/release/ltrace/x86_64/bin/ltrace: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=b46d8b17ed40d165d6e339466237fef6c094f63e, not stripped
make uninstall && make distclean
time CC=aarch64-himix100-linux-gcc LD=aarch64-himix100-linux-ld RANLIB=aarch64-himix100-linux-ranlib AR=aarch64-himix100-linux-ar ./configure --host=aarch64-himix100-linux --prefix=/opt/files/release/ltrace/aarch64/ CPPFLAGS='-I/opt/hisi-linux/x86-arm/aarch64-himix100-linux/target/usr/include/ -I/opt/files/release/elfutils/aarch64/include/ -D__LIBELF64=1' LDFLAGS="-Wl,-rpath-link,/opt/files/release/zlib/aarch64/lib -L/opt/files/release/elfutils/aarch64/lib"
time make CFLAGS+='-Wno-unused-local-typedefs'
time make install
root@ubuntu:/opt/files/ltrace-0.7.91# tree /opt/files/release/ltrace/aarch64/
/opt/files/release/ltrace/aarch64/
├── bin
│ └── ltrace
└── share
├── doc
│ └── ltrace
│ ├── COPYING
│ ├── CREDITS
│ ├── INSTALL
│ ├── README
│ └── TODO
├── ltrace
│ ├── libacl.so.conf
│ ├── libc.so.conf
│ ├── libc.so-types.conf
│ ├── libm.so.conf
│ ├── libpthread.so.conf
│ ├── libpthread.so-types.conf
│ └── syscalls.conf
└── man
├── man1
│ └── ltrace.1
└── man5
└── ltrace.conf.5
8 directories, 15 files
root@ubuntu:/opt/files/ltrace-0.7.91# file /opt/files/release/ltrace/aarch64/bin/ltrace
/opt/files/release/ltrace/aarch64/bin/ltrace: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.7.0, not stripped
root@ubuntu:/opt/files/ltrace-0.7.91#
make uninstall && make distclean
checking elf.h usability... no
checking elf.h presence... yes
configure: WARNING: elf.h: present but cannot be compiled
configure: WARNING: elf.h: check for missing prerequisite headers?
configure: WARNING: elf.h: see the Autoconf documentation
configure: WARNING: elf.h: section "Present But Cannot Be Compiled"
configure: WARNING: elf.h: proceeding with the compiler's result
configure: WARNING: ## --------------------------------------------------- ##
configure: WARNING: ## Report this to ltrace-devel@lists.alioth.debian.org ##
configure: WARNING: ## --------------------------------------------------- ##
checking for elf.h... no
configure: error: *** libelf.h or gelf.h not found on your system
root@ubuntu:/opt/files/ltrace-0.7.3# cat README
Supported Targets
-----------------
The following targets are currently (at least somewhat) supported.
Some of them may be more or less broken in reality, it is not feasible
to test each release comprehensively on each target.
i[4567]86-*-linux-gnu
ia64-*-linux-gnu
m68k-*-linux-gnu
mips-*-linux-gnu
powerpc-*-linux-gnu
powerpc64-*-linux-gnu
s390-*-linux-gnu
s390x-*-linux-gnu
x86_64-*-linux-gnu
(也可能没找到正确指令,看文档也支持64bit ^_^)
libelf_0.8.13.orig.tar.gz 146.1 KiB
https://launchpad.net/ubuntu/+source/libelf/0.8.13-5
strace交叉编译2小时就好了,ltrace花了2天时间!!!需要反思的一下:
(1)编译之前先看看文档,确认支持的版本;
(2)出错时认真分析日志文件,比如(config.log、实时打印输出的编译指令),一般会找到出错原因;
(3)交叉编译时思路要清晰,不要把依赖库的版本搞混,用x86_64的库去编译aarch64肯定会有问题;
(4)网上的参考贴好多都是年代久远,对新出的aarch64支持不友好,需要下载最新版本,对照源码文件文档进行编译;
(5)开源软件绝大多数都是用相同的发布机制进行管理的,一般是 autoconf + ./configure 生成Makefile;
(6)需要回炉一下编译、链接的过程,注意 -Wl,-rpath-link,DIR || -Wl,-rpath=DIR || -L DIR|| LD_LIBRARY_PATH=DIR的作用与区别;
(7)尽可能不要动开源软件的代码,大多数问题可以通过指定配置参数来规避。
libtool: compile: aarch64-himix100-linux-gcc -DHAVE_CONFIG_H -I. -I../.. -DSYSCONFDIR=\"/opt/files/release/ltrace/aarch64/etc\" -DPKGDATADIR=\"/opt/files/release/ltrace/aarch64/share/ltrace\" -I../../sysdeps/linux-gnu/aarch64 -I../../sysdeps/linux-gnu -I../../sysdeps -I../.. -I/opt/hisi-linux/x86-arm/aarch64-himix100-linux/target/usr/include/ -I/opt/files/release/libelf/aarch64/include/ -L/opt/files/release/libelf/aarch64/lib -D__LIBELF64=1 -Wall -Wsign-compare -Wfloat-equal -Wformat-security -Werror -g -O2 -MT proc.lo -MD -MP -MF .deps/proc.Tpo -c proc.c -fPIC -DPIC -o .libs/proc.o
proc.c: In function 'process_tasks':
proc.c:247:3: error: 'readdir_r' is deprecated [-Werror=deprecated-declarations]
if (readdir_r(d, &entry, &result) != 0) {
^~
In file included from proc.c:31:0:
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/target/usr/include/dirent.h:183:12: note: declared here
extern int readdir_r (DIR *__restrict __dirp,
------------
root@ubuntu:/opt/files/ltrace-0.7.91# find . -name "*.c" | xargs grep -rn "readdir_r"
./sysdeps/linux-gnu/proc.c:247: if (readdir_r(d, &entry, &result) != 0) {
root@ubuntu:/opt/files/ltrace-0.7.91# vi ./sysdeps/linux-gnu/proc.c +247
244 while (1) {
245 //struct dirent entry;
246 struct dirent *result;
247 if ( NULL == (result = readdir(d)) ) { //if (readdir_r(d, &entry, &result) != 0) {
248 fail:
249 if(tasks) free(tasks);
250 closedir(d);
251 return -1;
252 }
253 if (result == NULL)
254 break;
-L、-rpath和-rpath-link的区别 https://blog.csdn.net/q1302182594/article/details/42102961