c++ - 在 Ubuntu 12.04 上链接 - 对 `clock_gettime@GLIBC_2.17' 的 undefined reference

标签 c++ linux ubuntu

我正在 Ubuntu 12.04 上编译一个 C++ 项目,我收到一个链接错误说明

undefined reference to `clock_gettime@GLIBC_2.17'

undefined reference to `clock_getres@GLIBC_2.17'

我阅读了很多关于这个问题的帖子,并且尝试了所有常用的解决方案(分别)。比如在g++命令行中加入-lrt标志(我在开头和结尾都试过了),设置cmake linker flags变量为-lrt ,将 librt.so 位置添加到 link_directories 变量,甚至添加到 target_link_libraries。这些都不起作用。

当我运行 ldd --version 我得到

ldd (Ubuntu EGLIBC 2.15-0ubuntu10.12) 2.15

根据我的研究,这是 Ubuntu 12.04 的最后一个 glibc 版本。但是错误引用了 glibc 2.17... 所以我的问题是:我是否因为 gclib 版本而收到此错误?有什么办法可以获得 Ubuntu 12.04 的更新版本?

提前致谢!

最佳答案

尽管(因为 OS 很古老)它可能不再适用,写一个答案(因为 @ecnl 多年没有访问该站点)。

根本原因是在两个版本之间,clock_* 函数从 LibRT 移到了 LibC(正如[SO]: C++ error: undefined reference to 'clock_gettime' and 'clock_settime' (@P.P's answer)(并引用了 [SourceWare]: Move clock_* symbols from librt to libc.))。
因此,链接到 v2.17ELF 将不会在 v2.15 上运行,因为它希望这些函数能够由 LibC 导出。可能的修复:

  1. 使用 v2.15 重建 .so(OP 已采用该选项)

  2. LibC 升级到 v2.17。然而,这可能会引发一些不兼容问题(其他依赖于 v2.15 的东西可能会停止工作),因此必须仔细考虑这一点

关于c++ - 在 Ubuntu 12.04 上链接 - 对 `clock_gettime@GLIBC_2.17' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30751893/

相关文章:

python - vim在ubuntu Precision 64上安装有关python2.7的错误

c++ - 当我用 C 编写 C++ 代码时是否可能显示错误?

c++ - glutSwapBuffers "Access violation reading location 0x0000000004C0F000"

c++ - 在没有 const_cast 的情况下修改 *this 的 const 方法

linux - 解析由 "categories"分隔的文件

c++ - Grid1->ClearGrid();和其他对 wxGrid crash app 的引用

c++ - BMP 纹理不显示

c++ - 是否可以在 WFP(Windows 过滤平台)中实现用户模式标注?

ubuntu - 我如何设置nginx每次都保持询问身份验证

qt - 在 Linux 上为 Qt5 WebEngine 启用 mp4/mpeg4/avc 支持