Apache log4cxx 是 C++ 版 log4j 移植,廣泛用於企業級專案。但其安裝需解決 apr、apr-util 依賴鏈,且預設安裝至 /usr/local 需 root 權限。本文記錄完整編譯安裝流程、權限處理、環境變數配置與測試驗證,避開常見坑點。
| 元件 | 版本 (示例) | 角色 | 下載來源 |
|---|---|---|---|
| APR | 1.7.0+ | 可移植運行時核心 | APR 官網 |
| APR-util | 1.6.1+ | APR 擴展工具 (XML、DBD 等) | APR-util 官網 |
| log4cxx | 0.13.0+ | 日誌框架主體 | log4cxx 官網 |
安裝順序鐵律: APR → APR-util → log4cxx (後者依賴前者的編譯產物)。
mkdir -p ~/build/log4cxx
cd ~/build/log4cxx
# 下載三個 tarball 放入此目錄
tar -xzf apr-1.7.0.tar.gz
cd apr-1.7.0
./configure --prefix=$HOME/.local/apr
make -j$(nproc)
make install
cd ..
tar -xzf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1
./configure --prefix=$HOME/.local/apr-util \
--with-apr=$HOME/.local/apr
make -j$(nproc)
make install
cd ..
tar -xzf apache-log4cxx-0.13.0.tar.gz
cd apache-log4cxx-0.13.0
./configure --prefix=$HOME/.local/log4cxx \
--with-apr=$HOME/.local/apr \
--with-apr-util=$HOME/.local/apr-util
make -j$(nproc)
make install
cd ..
編輯 ~/.bashrc (或 ~/.bash_profile) 追加:
export LOG4CXX_HOME=$HOME/.local/log4cxx
export PATH=$LOG4CXX_HOME/bin:$PATH
export LD_LIBRARY_PATH=$LOG4CXX_HOME/lib:$HOME/.local/apr/lib:$HOME/.local/apr-util/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$LOG4CXX_HOME/lib/pkgconfig:$HOME/.local/apr/lib/pkgconfig:$HOME/.local/apr-util/lib/pkgconfig:$PKG_CONFIG_PATH
export CPLUS_INCLUDE_PATH=$LOG4CXX_HOME/include:$HOME/.local/apr/include/apr-1:$HOME/.local/apr-util/include/apr-1:$CPLUS_INCLUDE_PATH
執行 source ~/.bashrc 生效。
test_log4cxx.cpp:#include <log4cxx/logger.h>
#include <log4cxx/basicconfigurator.h>
#include <log4cxx/propertyconfigurator.h>
#include <log4cxx/helpers/exception.h>
using namespace log4cxx;
using namespace log4cxx::helpers;
LoggerPtr logger(Logger::getLogger("TestLogger"));
int main() {
BasicConfigurator::configure();
LOG4CXX_INFO(logger, "log4cxx 安裝測試成功!");
LOG4CXX_WARN(logger, "這是一條警告訊息。");
return 0;
}
g++ -std=c++11 -I$LOG4CXX_HOME/include \
-I$HOME/.local/apr/include/apr-1 \
-I$HOME/.local/apr-util/include/apr-1 \
-L$LOG4CXX_HOME/lib -L$HOME/.local/apr/lib -L$HOME/.local/apr-util/lib \
-o test_log4cxx test_log4cxx.cpp \
-llog4cxx -laprutil-1 -lapr-1 -lpthread -ldl
./test_log4cxx
若輸出帶時間戳、級別的日誌行,安裝成功。
| 錯誤現象 | 原因 | 解決 |
|---|---|---|
configure: error: APR not found | 未指定 --with-apr | 補上正確路徑 |
fatal error: apr.h: No such file | 編譯時未包含 APR 標頭 | 加 -I 路徑 |
undefined reference to `apr_...` | 連結時缺少 APR 庫 | 加 -L 路徑與 -lapr-1 |
執行時報 liblog4cxx.so: cannot open shared object file | 執行時找不到動態庫 | 確認 LD_LIBRARY_PATH 包含所有 lib 目錄 |
權限不足安裝至 /usr/local | 無 root 權限 | 改用 --prefix=$HOME/.local/xxx 安裝至用戶目錄 |
yum install log4cxx-devel (EPEL) 或 apt-get install liblog4cxx-dev,避免手動編譯維護成本。/opt/log4cxx,建立 /etc/ld.so.conf.d/log4cxx.conf 執行 ldconfig,並編寫 /etc/profile.d/log4cxx.sh 統一環境變數。find_package(log4cxx REQUIRED) 自動偵測路徑,而非硬編碼編譯旗標。核心心法:「依賴鏈順序不可亂、環境變數缺一不可、測試程式要能跑」。log4cxx 安裝雖繁瑣,但按步驟執行、逐項驗證,一定能成功。
Ubuntu 系統安裝 Guake 終端機:輕量級下拉式終端神器
Ubuntu 14.04 Unity Dash 新增關機/重啟/登出快捷選單:Power Commands 安裝指南
Linux sed 串流編輯器常用選項與指令實戰範例大全 (刪除、顯示、新增、取代、插入)
Linux 系統管理員必會的 Vim 進階操作:五大模式、Taglist、Cscope、Ctags 整合
Ubuntu 聲音菜單播放器管理:dconf-editor 精準清理指南
CentOS 使用 Windows 字體(微軟雅黑、Consolas、黑體)完整設定教學