2008-11-11 59 views
3

當使用C/C++構建在Linux上訪問MySQL數據庫的應用程序時,我必須動態鏈接到mysql客戶端庫。有沒有一種方法可以靜態鏈接應用程序,以便不再需要mysql客戶端庫?MySQL和C應用程序

有關C \ C++開發的最佳做法是將相當長的查詢包含在應用程序中但在代碼之外?使用存儲過程不可能,因爲數據庫在MySQL 4服務器上運行。

+0

請把它分成兩個問題 – Alnitak 2008-11-21 22:41:51

回答

1

應該很容易創建靜態mysql客戶端庫。如果你下載了源代碼,你只需要確保你正確配置它: ./configure --enable-static 這應該構建libmysql/libmysqlclient.a(或可能是libmysql/.libs/libmysqlclient.a),它應該是易於靜態鏈接到您的可執行文件。

您將需要您的可執行文件在GPL下獲得許可,否則您需要從MySQL人員處購買適當的許可證。

0

以下編譯命令行工作對我來說靜態鏈接mysql客戶端庫:

gcc -I/usr/include/mysql -c mysql.c 
gcc -o mysql mysql.o -static -lmysqlclient -static-libgcc -lm -lz -lpthread 

不過,我收到了以下警告,這可能是也可能不是你的問題。這似乎是說目標機器與構建機器具有相同的glibc版本。

/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmysqlclient.a(mf_pack.o): In function `unpack_dirname': 
(.text+0x6cc): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmysqlclient.a(libmysql.o): In function `read_user_name': 
(.text+0x5ed7): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmysqlclient.a(mf_pack.o): In function `unpack_dirname': 
(.text+0x6e1): warning: Using 'endpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmysqlclient.a(my_gethostbyname.o): In function `my_gethostbyname_r': 
(.text+0x3c): warning: Using 'gethostbyname_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmysqlclient.a(libmysql.o): In function `mysql_server_init': 
(.text+0x695d): warning: Using 'getservbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking