在我的示例C代码中,我使用mysqlclient连接到MySQL服务器这是生成文件。

example: example.c
    $(CC) $< -o $@ `mysql_config --cflags --libs`

它工作得很好但是生成的示例是动态链接的,这不是我想要的我要做的是静态链接libmysqlclient,动态链接libz、libcrypto等其他库。
仅供参考mysql_config的输出带有--cflags--libs:
$ 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

最佳答案

幸运的是我有闪电可以击中这个死柱子也许它会活着。。。
MySQL安装将附带两个库,一个是共享库,一个是静态库您只需要显式地链接静态库,而不是共享库不幸的是,mysql_config可能在这里帮不上忙,所以您必须自己找到它,但它可能在`/usr/lib/libmysqlclient.a'中。这样做:

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

(其中...etc...mysql_config --libs发出的所有剩余输出。)
扩展名.a表示它是一个静态库;我们使用完整的路径名,而不是-lmysqlclient,来强制编译器使用静态版本,而不是它通常喜欢的动态版本。

07-24 09:46
查看更多