首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

macOS 編譯 Hadoop 2.5.2 失敗:ld: library not found for -lrt

     編輯:程式設計綜合問答

錯誤訊息

ld: library not found for -lrt
clang: error: linker command failed with exit code 1

原因

**`librt` (Real-time Library) 是 Linux 特有**,提供 `clock_gettime`、`aio`、`mq_*` 等 POSIX 實時擴展。**macOS (Darwin) 內核不提供 `librt`**,這些功能整合在 `libc` (libSystem) 中。

解決方案

  1. 修改 CMakeLists.txt / 編譯腳本:移除 `-lrt` 連結參數,或條件式編譯:
    if(UNIX AND NOT APPLE)
        target_link_libraries(target rt)
    endif()
    
  2. 若代碼使用 `clock_gettime`**:macOS 10.12+ 支援 `clock_gettime` 在 `libc` 中,無需額外連結。舊版 macOS 需自行實作或用 `gettimeofday`/`mach_absolute_time` 替代。
  3. 安裝 Xcode Command Line Tools:`xcode-select --install` 確保 `libc`、`pthread` 等基礎庫完整。

Hadoop 編譯實踐建議

  • **官方不支援 macOS 為生產編譯環境**,建議使用 **Linux (CentOS/Ubuntu) 虛擬機/容器** 編譯,避免大量平台差異修補。
  • 若必須在 macOS 編譯,參考 Hadoop Developer Environment 的 macOS 專用 profile / patch。

總結

`ld: library not found for -lrt` = **macOS 無 librt**。修正:CMake 中對非 Apple 平台才連結 `rt`,或改用 Linux 環境編譯 Hadoop。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved