【问题标题】:lmbench3 cross-compiling undefined pmap_setlmbench3 交叉编译未定义的 pmap_set
【发布时间】:2016-11-11 17:19:13
【问题描述】:

我想在 x86 机器上为 ARM64 交叉编译 lmbench。我根据这里的指南构建了自己的交叉编译器:http://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/

当我尝试用这个交叉编译器交叉编译 lmbench3 时,我首先必须:

  1. 删除 src/Makefile 中使用 bk.ver 的所有行
  2. 在 Makefile 的第 200 行将 bk.ver 替换为 3,这样我就有了:

sed -e "s/<version>/3/g" < ../scripts/lmbench > $O/lmbench
  1. 设置CC=aarch64-linux-gccOS=aarch64-linux-gnuCFLAGS="$CFLAGS -static"
  2. 将所有glibc-2.20/sunrpc/rpc头文件放入/opt/cross/aarch64-linux/include/rpc文件夹中
  3. 然后,当我键入 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_setpmap_unsetpmap_getportlib_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


【解决方案1】:

从错误信息看,ld没有找到lib,试试下面

make results LDFLAGS=-ltirpc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-26
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2015-07-12
    相关资源
    最近更新 更多