2008-11-11 62 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