在 Perl 開發中,DBD::mysql 是連接 MySQL 的核心模組,但安裝過程常因符號缺失報錯,特別是 undefined symbol: DBIc_TRACE_LEVEL。本文記錄一次典型的安裝失敗案例,並提供經驗證有效的解決方案。
使用 cpanm 安裝時出現編譯錯誤:
# cpanm DBD::mysql ... Can't load '/home/nue2501j/work/DBD-mysql-4.010/blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: undefined symbol: DBIc_TRACE_LEVEL at /usr/lib/perl5/5.8.5/i386-linux-thread-multi/DynaLoader.pm line 230. Compilation failed in require at (eval 4) line 2. BEGIN failed--compilation aborted at (eval 4) line 2. FAILED--Further testing stopped: Unable to load DBD::mysql
錯誤核心:動態載入 mysql.so 時找不到 DBIc_TRACE_LEVEL 符號,通常是因為 DBI 核心模組版本不匹配或編譯環境缺失依賴。
直接安裝 Bundle::DBD::mysql 可自動處理依賴關係,編譯鏈接正確的 DBI 版本:
$ sudo perl -MCPAN -e shell cpan> install Bundle::DBD::mysql /usr/bin/make -- OK /usr/bin/make test -- OK /usr/bin/make install -- OK cpan> install DBD::mysql DBD::mysql is up to date.
Bundle::DBD::mysql 包含 DBI、DBD::mysql 及所需編譯工具,確保版本兼容。--with-mysql-config),避免手動指定路徑出錯。libmysqlclient-dev 等開發庫,CPAN 也會提示安裝。mysql-devel / libmysqlclient-dev(提供 mysql_config)。mysql_config 路徑:perl Makefile.PL --mysql_config=/usr/bin/mysql_config。總結:遇到 DBD::mysql 編譯符號錯誤,優先用 Bundle::DBD::mysql 一鍵解決依賴地獄,省時省力。