проблема линковки в linux (не могу найти название соответствующей библиотеки) - PullRequest
1 голос
/ 06 мая 2011

Я пытаюсь использовать библиотеку (http://code.google.com/p/qxmpp/), но я не могу найти имя библиотеки, чтобы связать ее с ней. Я хочу понять, как вы можете узнать имя библиотеки для использования в параметрах связывания.

Ответы [ 2 ]

2 голосов
/ 06 мая 2011

Похоже, что это только исходный архив - без бинарных файлов. Вы построили библиотеку из этого? Куда это положил процесс сборки? /usr/lib или /usr/local/lib будут обычными подозреваемыми, но прочитайте документацию по сборке и установке в пакете.

1 голос
/ 06 мая 2011

Учитывая, что имя библиотеки libqxmpp.a и (как вы упомянули в комментарии), что она находится в обычном каталоге lib (/usr/lib), вы можете легко определить правильные параметры:

gcc и другие компиляторы имеют переключатель -l, который находит библиотеку на основе имени, которое вы ей даете.По умолчанию он будет искать пути, указанные для GCC во время сборки (обычно /lib и /usr/lib) и любые другие, заданные для /etc/ld.so.conf.Если вы добавите переключатель -lX, он будет добавлен lib к имени и по умолчанию append .so и будет искать любой файл, который выглядит как libX.so в любомиз каталогов lib, о которых он знает.

Работая в обратном направлении, мы можем сделать вывод, что вызов gcc с -lqxmpp будет искать файл с именем libqxmpp.so (на самом деле, он также ищет несколько других имен.) Как заставить его искать файл .a?Эти ar зубки чеснока (man ar) являются статическими библиотеками, поэтому перед переключателем -static перед библиотекой передайте:

gcc -o progname your.o program.o files.o -static -lqxmpp

(Если вам необходимо установить связь с другими библиотекамивам может понадобиться добавить -Wl,-dynamic для них, если вы не хотите, чтобы они были статически связаны или статические библиотеки недоступны.)

В качестве альтернативы, вы можете сделать это, если знаете полный путь:

gcc -o progname your.o program.o files.o /usr/lib/libqxmpp.a

... И работает точно так же.

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