Вопросы про линковку
может ли .so использоваться для статической линковки ?
не может
если есть .so и .a, который из них используется, если в опциях компилятора явно не указан вид линковки ?
В GNU по умолчанию динамический. Думаю, у остальных так же.
как заставить компилятор написать, какие именно либы он использует ?
Он использует только те, которые ты указал ему как -llib.
Узнать какие библиотеки используются уже готовым динамическим бинарником можно с помощью команды ldd.
а что мешает кстати? и есть ли где понятная дока, а то я совсем не понимаю в этих вопросах?
требует долгого хакинга и не дюжинных знаний. А практически нельзя.
Ты поищи в groups.google.com этот тред, кажись там были ссылки.
в смысле наоборот?
Если PIC, то есть реальный шанс, на мой взгляд.
Так это же вообще вроде штатная операция. Однако вопрос перечитай.
Хм, а не Глебу ли ты это сказал?
Кажися в groups.google.com нет постов такой старости. Если тебе действительно очень интересно напиши Valentin Nechaev <segfault.kiev.ua>, скажи что помнишь, что он когда-то давно об этом писал. Мб он подкинет ссылок. Или напиши непосредственно в ru.unix.prog
Да, ты прав.
> Он использует только те, которые ты указал ему как -llib
Не только, например libc.
А вообще, допустим в путях есть две статические либы с одинаковым названием. Как понять, какая из них была/будет использована при линковке ?
cc file1.c file2.o lib1.a /lib_path/lib2.a -o file
разве нельзя?
cc $PATH1/libx.a $PATH2/libx.a ля-ля-ля-ля
?
По идее обе подлинкует. Надо проверить.
Допустим, в путях есть две либы с одинаковым именем. Какой наиболее простой способ выяснить, которая из них будет использоваться ?
Можно, конечно, посмотреть -L, пройтись по путям, найти первую либу с таким именем. Это долго. Может он умеет прямо писать: в качестве -l1 беру, скажем, /usr/lib/lib1.a и так далле ?
А что бы писал - хз. Не нашел я в мане ключей связанных с verbosity.
Да и у линкера такие флаги тоже есть.
Он даже про -L не рассказывает
Да, надо было читать не man, а info.
Оставить комментарий
ppplva
1. может ли .so использоваться для статической линковки ? т.е. могут ли символы из него попасть в собираемый бинарник ( кроме как Undefined ) ?2. если есть .so и .a, который из них используется, если в опциях компилятора явно не указан вид линковки ?
3. как заставить компилятор написать, какие именно либы он использует ?