MySQL и C приложения - PullRequest
       14

MySQL и C приложения

3 голосов
/ 11 ноября 2008

При создании приложения, которое обращается к базе данных MySQL в Linux с использованием C / C ++, мне нужно динамически подключаться к клиентской библиотеке mysql. Есть ли способ, которым я могу статически связать приложение так, чтобы клиентские библиотеки mysql больше не требовались?

Какова наилучшая практика в отношении разработки на языке C \ C ++ - включать довольно длинные запросы в приложение, но вне кода? Использование хранимых процедур невозможно, поскольку база данных работает на сервере MySQL 4.

Ответы [ 2 ]

1 голос
/ 11 ноября 2008

Должно быть легко создавать статические клиентские библиотеки mysql. Если вы загрузили исходный код, вам просто нужно убедиться, что вы настроили его соответствующим образом: ./configure --enable-static Это должно создать libmysql / libmysqlclient.a (или, возможно, libmysql / .libs / libmysqlclient.a), который должен быть легко статически связан статически в ваш исполняемый файл.

Вам нужно, чтобы ваш исполняемый файл был лицензирован по лицензии GPL, или вам нужно будет купить соответствующую лицензию у пользователей MySQL.

0 голосов
/ 17 ноября 2008

Следующая командная строка компиляции работала для меня, чтобы статически связать клиентские библиотеки 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
...