首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

解決 MySQL 客戶端庫鏈接錯誤:undefined reference to `mysql_xxx`

     編輯:MySQL 資料庫相關知識

錯誤現象

編譯鏈接使用 MySQL C API 的程式時出現:

/tmp/ccFKsdPa.o: In function `main':
undefined reference to `mysql_init'
undefined reference to `mysql_real_connect'
undefined reference to `mysql_error'
undefined reference to `mysql_close`

根因

鏈接器未找到 MySQL 客戶端庫 libmysqlclient。

解決方案

  1. 指定庫路徑與庫名: 編譯命令加入 -L<庫目錄> -lmysqlclient
    例:gcc -o myapp myapp.c -L/usr/lib/mysql -lmysqlclient
  2. 使用 mysql_config 自動獲取參數(推薦):
    gcc -o myapp myapp.c $(mysql_config --cflags --libs)
  3. 壓縮庫依賴: 若報 uncompress 等符號缺失,加 -lz 鏈接 zlib。
  4. 系統庫缺失: 查閱缺失函數 man 手冊確認所屬庫(如 connect 需 -lsocket -lnsl 等)。
  5. 庫版本不兼容: 報 __lxstat 等符號缺失,說明預編譯庫與當前系統 glibc 版本不匹配,需下載源碼自行編譯。

運行時動態庫找不到

錯誤:libmysqlclient.so: cannot open shared object file

  1. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/libmysqlclient
  2. 或將庫複製至 /usr/lib 並執行 ldconfig。
  3. 或編譯時靜態鏈接:gcc -static -o myapp myapp.c $(mysql_config --libs)(注意:靜態鏈接可能導致許可證與部署問題)。

快速驗證

mysql_config --libs
# 輸出示例:-L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -lssl -lcrypto

直接將輸出加入編譯命令即可解決 90% 鏈接問題。

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