交叉编译:无法解析符号 'register_printf_function'

Cross compilation: can't resolve symbol 'register_printf_function'

我已经交叉编译了 strongswan-5.2.2,一个实现 VPN 服务器和客户端的开源项目,用于 embedded-linux 运行 on mipsel (target) on Ubuntu12.04 运行 在 Intel x86 机器上。

但是在mipsel机器上执行交叉编译的strongswan失败如下:

$ ./charon
./charon: can't resolve symbol 'register_printf_function'

似乎 libc.so 没有被可执行文件引用。我这样认为的原因是 register_print_functionlibc.so (AFAIK) 中实现。但是,libc.so 已经存在于目标 mipsel 机器的 /lib 上。

检查可执行文件引用的所有共享库显示:

$ readelf -d ./charon | grep NEEDED
 0x000001 (NEEDED)  Shared Library: [libm.so.0]
 0x000001 (NEEDED)  Shared Library: [libpthread.so.0]
 0x000001 (NEEDED)  Shared Library: [libdl.so.0]
 0x000001 (NEEDED)  Shared Library: [libgcc_s.so.1]
 0x000001 (NEEDED)  Shared Library: [libc.so.0]

目标机器的 /lib 上存在上述所有库..

为什么会出现该错误消息,但我在目标机器上拥有可执行文件所需的所有共享库?还有……我该如何解决这个问题?

更新:

$ nm -D libc.so.0 
...
0002fb70 T register_printf_fuction
...

那个功能已经在共享库中实现了,是不是...?

register_printf_function 特定于 GNU glibc. If your target machine has some other libc (e.g. dietlibc or musl-libc) 它不可用。

您可以为您的目标机器编译 glibc(可能很困难)或找到 strongswan 特定的解决方法

检查 nm -D /lib/libc.so 目标 libc 是否有 register_printf_function