#c #c #linux #linker #xmpp
#c #c #linux #компоновщик #xmpp
Вопрос:
Я пытаюсь использовать библиотеку (http://code.google.com/p/qxmpp /) но я не могу найти название библиотеки, с которой ее можно связать. Я хочу понять, как вы можете узнать название библиотеки для использования в параметрах привязки.
Комментарии:
1. Разве документация библиотеки не сообщает вам?
2. в документации ничего не говорится о компиляции
Ответ №1:
Похоже, что это только исходный архив — двоичные файлы не включены. Вы создали библиотеку на его основе? Куда процесс сборки поместил это? /usr/lib
или /usr/local/lib
были бы обычными подозреваемыми, но прочитайте документацию по сборке и установке в пакете.
Комментарии:
1. Я установил его через apt-get в Ubuntu и нашел файл библиотеки .a «/usr/lib/ libqxmpp.a», но связывание с libqxmpp не работает
2. Опубликуйте командную строку compile и link, которую вы используете. Вы вводите
-lqxmpp
в командную строку?3. -lqxmpp сработал, большое вам спасибо. является ли правилом называть библиотеку с префиксом l?
4.
-l
Параметр командной строки указывает компоновщику добавить указанную библиотеку при попытке компоновки. В unix компоновщик автоматически добавитlib
к заданному имени при поиске файла библиотеки. Итак, если вы скажете,-lfoo
компоновщик будет искатьlibfoo.a
илиlibfoo.so
. Он ищет файл в стандартном пути поиска библиотеки, который вы можете расширить, используя-L
опцию добавления дополнительных каталогов к пути (представьте, что-L
для компоновщика и библиотек то же, что-I
для компилятора и заголовочных файлов.)
Ответ №2:
Учитывая, что имя библиотеки libqxmpp.a
и (как вы упомянули в комментарии), что она находится в обычном каталоге lib ( /usr/lib
), вы можете легко вывести правильные параметры:
gcc
и у других компиляторов есть -l
переключатель, который находит библиотеку на основе имени, которое вы ей даете. По умолчанию он будет искать пути, указанные GCC во время сборки (обычно /lib
и /usr/lib
) и любые другие, указанные /etc/ld.so.conf
. Если вы добавите переключатель -lX
, он будет добавляться lib
к имени и по умолчанию добавлять .so
и искать любой файл, который выглядит как libX.so
, в любом из известных ему каталогов lib.
Работая в обратном направлении, мы можем сделать вывод, что вызов gcc
с -lqxmpp
будет искать файл с именем libqxmpp.so
(на самом деле, он также ищет несколько других имен). Как мы можем заставить его искать .a
файл? Эти ar
chives ( 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
… И это работает точно так же.