關於gcc編譯使用mysql庫的程序

有關c語言操作mysql數據庫的源程序在這裏就不列了,網上隨手可以抓到一把。

我在這裏遇到的問題是寫好的程序編譯不正確。

測試環境:
inter pentium dual CPU
fedora 6,linux kernel 2.6.18,32位平臺
gcc 4.1.1-30
mysql-devel-5.0.22-2.1
這樣的平臺下我的mysql.h位於/usr/include/mysql/,相應的lib位於/usr/lib/mysql

研究後,發現下邊的兩種方法均可以編譯通過
方法1:
gcc -c mysqltest.c
gcc -o mysqltest mysqltest.o -L/usr/lib/mysql -lmysqlclient
如果源程序的頭文件寫成#include <mysql.h>,第一步會提示錯誤,無法找到mysql.h,緊跟着一堆的函數未聲明,因爲mysql.h位於/usr/include/mysql/,所以應該寫爲#include <mysql/mysql.h>(其實寫爲#include <mysql.h>也可,後邊說明),這樣就可以了。
第二步中-L參數指明瞭庫文件的位置,-l參數指明瞭要使用的庫文件,這個庫文件就是/usr/lib/mysql/libmysqlclient.so。
不要奇怪爲什麼參數中指明的是mysqlclient,而庫文件實際上是libmysqlclient.so,其實gcc就是這樣,-l參數後邊緊跟的庫名是實際的庫名去掉lib和.so後的部分,所有的庫名都是lib***.so,因爲庫文件的版本問題(我想是的),lib***.so大多是一個符號鏈接,就像這裏的libmysqlclient.so實際上是同目錄下的libmysqlclient.so.15.0.0的鏈接。
方法2:
gcc mysqltest.c -o mysqltest `mysql_config --cflags --libs`
注意不是單引號,數字鍵1左邊的。
頭文件無所謂寫成#include <mysql.h>或者#include <mysql/mysql.h>,也無需指定需要的mysql庫和路徑。mysql_config會全盤負責,這個腳本文件在/usr/lib/mysql下,它包括了我剛纔需要手動指定的信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章