【发布时间】:2016-11-11 17:19:13
【问题描述】:
我想在 x86 机器上为 ARM64 交叉编译 lmbench。我根据这里的指南构建了自己的交叉编译器:http://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
当我尝试用这个交叉编译器交叉编译 lmbench3 时,我首先必须:
- 删除 src/Makefile 中使用 bk.ver 的所有行
- 在 Makefile 的第 200 行将 bk.ver 替换为 3,这样我就有了:
sed -e "s/<version>/3/g" < ../scripts/lmbench > $O/lmbench
- 设置
CC=aarch64-linux-gcc、OS=aarch64-linux-gnu、CFLAGS="$CFLAGS -static" - 将所有
glibc-2.20/sunrpc/rpc头文件放入/opt/cross/aarch64-linux/include/rpc文件夹中 - 然后,当我键入 make 命令时,我收到以下错误:
gmake[1]: Entering directory `/home/florian/lmbench3/src'
aarch64-linux-gcc -O -DRUSAGE -DHAVE_uint=1 -DHAVE_int64_t=1 -DHAVE_DRAND48 -DHAVE_SCHED_SETAFFINITY=1 -o ../bin/aarch64-linux-gnu/bw_tcp bw_tcp.c ../bin/aarch64-linux-gnu/lmbench.a -lm
../bin/aarch64-linux-gnu/lmbench.a(lib_tcp.o): In function `tcp_done':
lib_tcp.c:(.text+0x18): undefined reference to `pmap_unset'
../bin/aarch64-linux-gnu/lmbench.a(lib_tcp.o): In function `tcp_connect':
lib_tcp.c:(.text+0x338): undefined reference to `pmap_getport'
../bin/aarch64-linux-gnu/lmbench.a(lib_tcp.o): In function `tcp_server':
lib_tcp.c:(.text+0x568): undefined reference to `pmap_unset'
lib_tcp.c:(.text+0x584): undefined reference to `pmap_set'
collect2: error: ld returned 1 exit status
gmake[1]: *** [../bin/aarch64-linux-gnu/bw_tcp] Error 1
gmake[1]: Leaving directory `/home/florian/lmbench3/src'
make: *** [lmbench] Error 2
我知道pmap_set、pmap_unset 和pmap_getport 在lib_tcp.c 中被调用,但我在任何地方都找不到它们的定义。当我为 x86 编译 lmbench3 时,我没有收到这个错误,我在主机上到处检查了这些函数的定义,但仍然没有在任何地方找到它们。
有谁知道如何处理这个错误?我想我仍然需要使用 RPC,所以我宁愿不评论任何行。
【问题讨论】:
-
你的 ARM 目标是什么,它有什么操作系统?这个操作系统有 xdr 库吗? (pmap_set 手册页linux.die.net/man/3/pmap_set 有指向 xdr 手册页的链接。)你的交叉系统中有 arm 的 xdr 库吗?
-
目标操作系统是 Linux。我必须检查 xdr 库是否在跨系统中。但基本上我使用了相同版本的 gcc、binutils、mfpg 等......正如我在原始帖子中提供的链接中所做的那样,用于从源代码构建交叉编译器。
-
pmap 是在 glibc 中定义的(include/rpc/pmap_clnt.h github.molgen.mpg.de/git-mirror/glibc/blob/… & sunrpc/pmap_clnt.c github.molgen.mpg.de/git-mirror/glibc/blob/…),但是这部分库是否已配置和构建?您应该检查构建日志。这些功能可以在其他对象中定义。您可以使用添加了
-v和-Wl,--verbose选项的aarch64-linux-gcc -v ../aarch64-linux-gcc -Wl,--verbose ...发布失败命令的输出吗?
标签: linux makefile cross-compiling rpc