【问题标题】:strlen runtime error on UbuntuUbuntu上的strlen运行时错误
【发布时间】:2012-05-31 12:25:23
【问题描述】:

我开发了一个在 Debian 下编译的 CGI C++ 应用程序。在 Ubuntu 系统上运行此应用程序出现错误:

重定位错误:/lib32/libresolv.so.2:符号 strlen,版本 GLIBC_2.0 未在带有链接时间参考的文件 libc.so.6 中定义

我现在能做什么?我应该在 Ubunto 系统上重新编译吗?我可以更换图书馆吗?

编辑

我将我的应用程序链接到-static
在 Ubuntu 系统上运行命令 ldd --version 表明我在那里使用了 EGLIB

【问题讨论】:

  • C 库运行时与您的系统和内核有着错综复杂的联系。最好重新链接您的应用程序。
  • 或者用-static链接应用程序。
  • 有一条评论暗示它可能与 32/64 位相关。我检查了。 Ubunto 是 64 位系统,而 Debian 系统不是。
  • @juergend:很好的收获。虽然 64 位系统支持 32 位二进制文​​件。即你有 /lib32 目录 - 它包含 32 位运行时

标签: c++ runtime-error glibc strlen


【解决方案1】:

此错误意味着您的程序是针对旧版本的 GNU libc 编译/链接的,而您要运行可执行文件的系统不支持该版本。

你有几个选择来解决它:

  1. 确保在编译和运行时使用相同或兼容版本的 libc。
  2. 链接到静态运行时。
  3. 在 Ubuntu 系统上安装旧版本的 libc 以匹配 Debian 的环境。

【讨论】:

  • 我确实与-static 链接。我是否必须将 glibc 包含到我的其他库中?
猜你喜欢
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
相关资源
最近更新 更多