3

C/C++ を使用して Linux 上の MySQL データベースにアクセスするアプリケーションを構築する場合、mysql クライアント ライブラリに動的にリンクする必要があります。mysql クライアント ライブラリが不要になるように、アプリケーションを静的にリンクする方法はありますか?

C\C++ 開発に関して、かなり長いクエリをアプリケーションに含め、コードの外側に含めるベスト プラクティスは何ですか? データベースは MySQL 4 サーバー上で実行されるため、ストアド プロシージャを使用することはできません。

4

2 に答える 2

1

静的なmysqlクライアントライブラリを簡単に作成できるはずです。ソースをダウンロードした場合は、適切に構成されていることを確認する必要があります。./configure --enable-staticこれにより、libmysql / libmysqlclient.a(または場合によってはlibmysql / .libs / libmysqlclient.a)がビルドされます。実行可能ファイルに静的にリンクします。

実行可能ファイルはGPLの下でライセンスされている必要があります。または、MySQLの人々から適切なライセンスを購入する必要があります。

于 2008-11-11T18:33:05.840 に答える
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
于 2008-11-17T05:03:14.437 に答える