錯誤訊息
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) 中。
解決方案
- 修改 CMakeLists.txt / 編譯腳本:移除 `-lrt` 連結參數,或條件式編譯:
if(UNIX AND NOT APPLE)
target_link_libraries(target rt)
endif()
- 若代碼使用 `clock_gettime`**:macOS 10.12+ 支援 `clock_gettime` 在 `libc` 中,無需額外連結。舊版 macOS 需自行實作或用 `gettimeofday`/`mach_absolute_time` 替代。
- 安裝 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。