在我的示例C代码中,我使用 mysqlclient 连接到MySQL服务器。这是 Makefile 。
example: example.c
$(CC) $< -o $@ `mysql_config --cflags --libs`
工作正常。但是生成的示例是动态的链接,这不是我想要的。我想做的是链接 libmysqlclient static ally,同时链接其他库 dynamic ally,例如 libz , libcrypto 。
FYI。 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
答案 0 :(得分:0)
您的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
来强制编译器使用静态版本而不是它通常喜欢的动态版本。