2011-12-24 15 views
1

サンプルCコードでは、mysqlclientを使用してMySQLサーバに接続します。ここにメイクファイルがあります。パーシャルリンクの操作方法は?

example: example.c 
    $(CC) $< -o [email protected] `mysql_config --cflags --libs` 

正常に動作します。しかし、生成されたは、私が欲しいものではないが、という動的に関連付けられたです。私は何をしたいことは、他のライブラリに対して、そのような libzを libcryptoのとしてダイナミック味方を、リンク中、libmysqlclientの静的味方にリンクすることです。

FYI。 --cflags --libsmysql_configをの出力:

幸いにも
$ mysql_config --cflags --libs 
-I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions \ 
-fstack-protector --param=ssp-buffer-size=4 -m64 -D_GNU_SOURCE \ 
-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv 

-rdynamic -L/usr/lib64/mysql -lmysqlclient -lz -lcrypt -lnsl -lm \ 
-L/usr/lib64 -lssl -lcrypto 
+0

[リンク時に静的ライブラリと共有オブジェクトライブラリを混在させることはできますか?](http://stackoverflow.com/questions/2954387/can-i-mix-static-and-shared-object-libraries-whenリンクする) –

答えて

0

私は、この死んポストを攻撃するためにいくつかの雷を持っています。たぶんそれは生きるでしょう...

あなたのMySQLインストールには2つのライブラリがあり、1つは共有され、もう1つは静的です。共有ライブラリではなく静的ライブラリに明示的にリンクするだけです。残念ながらmysql_configはおそらくここで助けになることはできませんので、自分で見つける必要がありますが、おそらく `/usr/lib/libmysqlclient.a 'にあります。 .a拡張子が、それは静的ライブラリです示し

$(CC) $< -o [email protected] /usr/lib/libmysqlclient.a `mysql_config --cflags` \ 
    -lz -lcrypt ...etc... 

(。...etc...mysql_config --libs発する出力のすべての残りの部分です)

;:だからこれを行います-lmysqlclientではなく、完全パス名を使用して、コンパイラに静的バージョンを使用させます。静的バージョンでは通常、動的バージョンが優先されます。

関連する問題