Как перевести флаг -lXi в линкере linux в соответствующую библиотеку? - PullRequest
0 голосов
/ 28 марта 2009

Как узнать, на какую библиотеку ссылается указанный выше флаг? Как бы я сделал это для другого?

Ответы [ 3 ]

2 голосов
/ 28 марта 2009

Параметр -l принимает имя библиотеки в качестве аргумента, поэтому в этом случае библиотека будет называться libXi.a (или libXi.so или что-то подобное). Чтобы найти библиотеку, посмотрите стандартные местоположения библиотеки (/ usr / lib, / lib, / usr / local / lib и т. Д.), Доступные в вашем дистрибутиве. Также могут быть дополнительные каталоги библиотек, указанные с помощью опции -L для компоновщика.

0 голосов
/ 28 марта 2009
strace -f -e open gcc ... -lXi 

Ищите libXi в выводе.

0 голосов
/ 28 марта 2009

Если ваша программа успешно скомпилирована, или если у вас есть другая программа, которая использует -lXi, то вы можете сделать:

ldd /path/to/that/program | grep libXi

Например:

$ ldd /usr/X11R6/bin/audacity | grep libXi
        libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0x00007f53faaba000)
        libXi.so.6 => /usr/lib/libXi.so.6 (0x00007f53f8e2c000)

И это, скорее всего, скажет вам, где находится эта библиотека. (Это не 100%, потому что процесс сборки может изменить путь поиска, но обычно это не так для стандартных библиотек, таких как X11.)

Оттуда вы можете спросить свой дистрибутив, в каком пакете есть этот файл, если вам не все равно. Например, в Ubuntu или дистрибутиве .deb-base:

$ dpkg --search /usr/lib/libXi.so.6
libxi6: /usr/lib/libXi.so.6

Если вы не можете использовать LDD, то проверьте /etc/ld.so.conf вашей системы, который укажет путь поиска для связывания совместно используемой библиотеки во время выполнения. (/lib / и /usr/lib включены по умолчанию.)

Наихудший случай, вы можете просто найти для него:

find / -regex '.*libXi\.\(a\|so\).*' 2> /dev/null
...