gpt4 book ai didi

linux - 交叉编译: can't resolve symbol 'register_printf_function'

转载 作者:太空狗 更新时间:2023-10-29 12:15:03 24 4
gpt4 key购买 nike

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

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

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

似乎 libc.so 没有被可执行文件引用。我这样认为的原因是 register_print_function 是在 libc.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 .如果你的目标机器有一些其他的 libc (例如 dietlibc 或 musl-libc)它不可用。

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

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

关于linux - 交叉编译: can't resolve symbol 'register_printf_function' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28447622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com