【问题标题】:Compile with another version of libc用另一个版本的 libc 编译
【发布时间】:2018-05-20 04:02:31
【问题描述】:

我尝试将我的 c++ 程序交叉编译为 armv5。只是通过交叉编译armv5,我遇到了以下错误: 未找到 GLIBC_2.17(libstdc++、libdbus、libsystemd 和 liblzma 需要) 我发现,我的目标平台上的 libc 当前版本是 15。

1) 有没有安全的更新方式?我在目标上没有 Internet 连接,只能通过 Telnet 连接。问题是,如果更新失败,我无法在设备上刷一个新的操作系统,而且我猜它坏了 99% ^^。

2) 如果对 (1) 表示“不,不是真的”,是否可以针对运行较新的 libc15 进行编译,或者有没有办法降级到 15? (创建一个用于编译的 VM,所以我不在乎是否有任何故障) 我必须指定什么才能针对另一个 libc 版本进行编译?,还没有找到合适的平面/参数...

感谢任何提示或想法,现在有一段时间了这个问题,我对 C++ 交叉编译太陌生了,找不到任何解决方案。 最好的问候,

【问题讨论】:

  • 要么降级整个交叉编译链,要么将新的 libc 上传到平台而不在系统范围内安装它。使用 rpath 或 LD_LIBRARY_PATH 在运行时将可执行文件与新版本链接。
  • 可能会有所帮助:stackoverflow.com/questions/2856438/…
  • 请不要在标题中添加已解决,而是接受您的答案,请参阅tour 了解更多信息。

标签: c++ arm cross-compiling glibc


【解决方案1】:

好的,对于遇到相同错误的每个人,这里是我的解决方案: LD_LIBRARY_PATH/rpath 事情正在工作,记住来自 ld-linux.so 的路径是硬编码的。因此,将所有库都放在 LD_LIBRARY_PATH 指定的文件夹中或者可能会发生其他依赖错误。 降级交叉编译工具链的方法也很有效,并在最后解决了整个问题(我在 LD_LIBRARY_PATH 解决方案中遇到了“内核太旧错误”)但要棘手得多,尤其是对于较旧的内核。此处为解决方案指定的 CXX:

CXX:= arm-linux-gnueabi-g++

CXXFLAGS:= -march=armv5 -msoft-float -mfloat-abi=soft -O3 \ -管道 \ -DPCAP_创建\ -std=c++1y -Wmissing-include-dirs \ -D_GLIBCXX_USE_NANOSLEEP \ -G \ -fno-deduce-init-list

所以我无法使用 C++11 或更高版本进行交叉编译,我怀疑它是否适用于带有 libc15 的 Armv5

最好的问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2018-05-25
    • 2017-08-26
    • 2013-10-27
    相关资源
    最近更新 更多