Вот пример, чтобы прояснить, как все работает с GCC при использовании статических библиотек. Итак, предположим, что мы имеем следующий сценарий:
myprog.o
- содержащий функцию main()
, зависящую от libmysqlclient
libmysqlclient
- статично, ради примера (вы предпочтете разделяемую библиотеку, конечно, поскольку libmysqlclient
огромен); в /usr/local/lib
; и зависит от материала из libz
libz
(dynamic) Как мы это связываем? (Примечание: примеры компиляции на Cygwin с использованием gcc 4.3.4)
gcc -L/usr/local/lib -lmysqlclient myprog.o
# undefined reference to `_mysql_init'
# myprog depends on libmysqlclient
# so myprog has to come earlier on the command line
gcc myprog.o -L/usr/local/lib -lmysqlclient
# undefined reference to `_uncompress'
# we have to link with libz, too
gcc myprog.o -lz -L/usr/local/lib -lmysqlclient
# undefined reference to `_uncompress'
# libz is needed by libmysqlclient
# so it has to appear *after* it on the command line
gcc myprog.o -L/usr/local/lib -lmysqlclient -lz
# this works