MySQL 和 C 应用程序

Posted

技术标签:

【中文标题】MySQL 和 C 应用程序【英文标题】:MySQL And C applications 【发布时间】:2008-11-11 14:54:19 【问题描述】:

在使用 C/C++ 在 linux 上构建访问 mysql 数据库的应用程序时,我必须动态链接到 mysql 客户端库。有没有一种方法可以静态链接应用程序,从而不再需要 mysql 客户端库?

关于 C\C++ 开发,在应用程序中但在代码之外包含相当长的查询的最佳做法是什么?由于数据库在 MySQL 4 服务器上运行,因此无法使用存储过程。

【问题讨论】:

请把这个问题分成两个问题 【参考方案1】:

应该很容易创建静态 mysql 客户端库。如果您下载了源代码,您只需要确保正确配置它: ./configure --enable-static 这应该构建 libmysql/libmysqlclient.a(或者可能是 libmysql/.libs/libmysqlclient.a),它应该很容易静态链接到您的可执行文件中。

您需要根据 GPL 许可您的可执行文件,或者您需要从 MySQL 人员那里购买适当的许可。

【讨论】:

【参考方案2】:

以下编译命令行对我有用,可以静态链接 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

【讨论】:

以上是关于MySQL 和 C 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 和 C#.Net 存储过程和多参数

c语言读取mysql库中的数据的程序头文件怎么设置

Mysql基本操作C++Mysql简单应用PythonMysql简单应用

用c程序连接mysql数据库

C/C++访问MySQL数据库

C#从mysql数据库获取锁定代码的关键部分