Как сделать частичное связывание? - PullRequest
2 голосов
/ 24 декабря 2011

В моем примере кода C я использую mysqlclient для подключения к MySQL Server.Вот Makefile .

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

1 Ответ

0 голосов
/ 11 марта 2013

К счастью, у меня есть молния, чтобы убить этот мертвый пост.Возможно, он будет жить ...

Ваша установка 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, чтобы заставить компилятор использовать статическую версию, а не динамическую версию рядом с ней, которую он обычно предпочитает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...