Я начинающий но уже продвинутый. Не могу сообразить принципы стандартной сборки приложения linux.
Вопросы возникли при попытках сборки vlc player. Это здоровенный можно сказать мультимедийный фрэймворк. Чтобы его собрать нужно ~30 других пакетов которые и между собой тоже связаны. Там есть автоматизация сборки всех нужных пакетов, но с первого раза не получилось. Процесс несколько раз стопорился и в каждом случае приходилось вручную разбираться с несобирающимся пакетом. И когда он наконец таки собрался, заработал тоже не сразу. Пришлось пересобирать несколько раз а на каждую пересборку не меньше 40 минут уходило. Я злился!
Не могу сообразить порядок вообще т.е.
1. autotools делают файлы Makefile и configure
2. gcc и g++ собирает файлы "o" из файлов c/cpp + h/hpp
3. ??? собирает из нескольких "o" файл "a"
4. ??? из "a" делает файл "so"
Статическая сборка - это включение кусков кода из одного "o" в другой ?
Где определяется что программа будет не статической а использовать "so" и какие ? Т.е. например пакет ffmpeg у меня уже есть в /usr/local. Сборочный скрипт vlc качает ffmpeg в свой подкаталог и как быть уверенным что при сборке будет использоваться именно скаченная версия
Что делает ldconfig? Т.е. не может ли он тоже повлиять на то какая версия ffmpeg будет использоваться. Ведь ldconfig при каждой загрузке запускается и что то связывает.
Как узнать версию файла "a" или "so" и вообще понятие версия библиотеки в линуксе что означает. Я виндузятник поэтому о версии представление такое - "правой кнопкой - свойства файла". Пробовал readelf но он выдает нечто большое которое явно не совпадает просто с цифрой в имени файла после "so". Эта цифра как я понимаю и есть версия? Но внутри файла версии нет что ли ? А у файлов "a" где тогда версия ?
я примерно знаю что надо читать: elf + libtool + ld + ldconfig + флаги -L -I -l но как говорил Киса Воробьянинов хочется чтобы побыстрее
