在我的示例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
,来强制编译器使用静态版本,而不是它通常喜欢的动态版本。