LINUX.ORG.RU

Как получить список библиотек, которые можно передать через -l...

 , ,


0

1

Для линковки с разными библиотеками есть разные опции, например -lm -lpthread -ldl итд. Каким образом компилятор сопоставляет эти -l(что-то-там) с конкретной библиотекой(где эта информация хранится) и как эти связи посмотреть в gcc и clang(какой библиотеке какой -lчто-то-там соотвествует)? Как добавить туда какую-то свою библиотеку, чтобы с ней можно было линковаться через gcc -lmylib ?

★★★★★

Каким образом компилятор сопоставляет эти -l(что-то-там)

что-то там - это часть имени файла библиотеки

-lm - libm.so или libm.a

-lcrypto - libcrypto.so или libcrypto.a

Harald ★★★★★
()
for l in `awk {'print $1'} <(pkg-config --list-all)`;do echo -n "$l -- ";pkg-config --libs-only-l "$l";done
wakuwaku ★★★★
()
Последнее исправление: wakuwaku (всего исправлений: 2)
Ответ на: комментарий от Harald

Т.е. имя обязательно должно начинаться на lib? А куда (как) прописывать свои библиотеки, чтобы они через этот -l находились и линковались?

SZT ★★★★★
() автор топика
Ответ на: комментарий от SZT

Т.е. имя обязательно должно начинаться на lib?

да

ну для gcc по крайней мере

А куда (как) прописывать свои библиотеки, чтобы они через этот -l находились и линковались?

Указывать директорию с библиотеками через опцию компилятора -L

Harald ★★★★★
()
Ответ на: комментарий от Harald

порядок перечисления библиотек через -l тоже имеет значение

Harald ★★★★★
()

ls -l {,/usr}/lib/*.{so*,a}

anonymous
()

Чтобы именно через -lxxx, нужно имя файла libxxx.{so,a} и путь к нему в -L. Если необязательно, то линкуй прямым именем libxxx.so без -l.

anonymous
()
cat test.c
int main(void)
{
	return 0;
}
gcc -v test.c

в выводе найдешь интересующую тебя информацию

-lmylib

надо скопировать в одину из папок твою библиотеку с именем libmylib.so или libmylib.a или лучше в текущую директорию, но тогда компилировать как-то так: gcc -c test.c -Wall -O2 -o test.o ; gcc -L. -lmylib test.o -o test опция -L. говорит, что сперва библиотеки надо искать в текущей папке, а потом в системных

IvanR ★★★
()
Ответ на: комментарий от Harald

ну для gcc по крайней мере

К gcc это не иммет отношения, так работает ld

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.