|
|
|
Железный канал: «Клуб программистов.» |
|
|
Progressor
140 EGP
  Рейтинг канала: 3(26) Репутация: 32 Сообщения: 221 Откуда: Border worlds Зарегистрирован: 28.03.2005
 |
|
ух ты_живые пилоты и срутся еще )
0111010011, программирование, как вдох_выдох, как азбука Морзе...
_________________ .::||::. |
|
|
Dimaxx
1016 EGP
      Рейтинг канала: 8(898) Репутация: 204 Сообщения: 5811 Откуда: Северодвинск Зарегистрирован: 26.06.2002
 |
|
Раз тут клуб погромистов, то спрошу тут.
Есть либа libwebp. Компилю исходники с помощью msys2+gcc. Сама либа собирается на ура, НО! Она тянет за собой libgcc и тут же собираемую libsharpyuv (юзается вроде как энкодером). От libgcc избавился с помощью -static-libgcc, но от второй избавиться не могу - она упорно лезет в зависимости и без нее libwebp.dll не грузится, а тащить кучу говна не хочу (мне и от libwebp нужно только декодирование). Удалить ее нельзя - перестанет собираться основная либа. После компиляции остается куча объектников - сама libwebpdecode не собирается, хотя для нее все есть. Как собрать из объектников либу? Или как избавиться от зависимости libsharpyuv?
_________________ "Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс |
|
|
Voha
942 EGP
          Рейтинг канала: 9(1062) Репутация: 169 Сообщения: 4977 Откуда: Moscow, Russia Зарегистрирован: 15.02.2001
 |
|
Dimaxx : |
Или как избавиться от зависимости libsharpyuv?
|
А цель какая - получить герметичную сборку без динамических библиотек или именно лишние зависимости спилить? Если конечный объект либа - то без выпиливания из сорсов лишнего скорей всего не получится, линкер будет собирать всё объявленное, мало ли какие объекты потребует ссылающийся на либу. Если герметичный бинарь, то в теории статическая линковка должна будет притащить только необходимые функции из всех зависимых библиотек.
добавлено спустя 24 минуты:
STinger : |
Voha : |
Продвинутый разработчик может и несколько сотен строк написать без тестовых запусков в процессе.
|
Такие люди наверняка есть, но врядли их большинство. Мне это точно не подходит, так как у меня плохая память, и я работаю всегда исходя из этого - если я забыл как что-то работает, то тут же тестовые запуски с логами в консоль мне всё освежат.
Ещё у некоторых видел тесты прям в VS Code: написал что-то, нажал кнопку, прогнались тесты.
|
Таких людей не просто большинство, их среди разработчиков подавляющее большинство.
STinger : |
Voha : |
Довольно часто на собесах нужно "на листочке" (т.е. без IDE и попыток компиляции) написать код
|
В определённых кругах это считается лютым неадекватингом, и такие конторы избегают
|
Давай попробуем перечислить эти неадекватные конторы? Гугл, фэйсбук, алибаба, амазон, нетфликс, букинг, MS - из известных мне мирового уровня. Озон, яндекс, сбедевайсез, мтс диджитал, ВБ, касперский - из известных мне российских. Про ХФТ-конторы я особо не в курсе, это не оч понятный для меня мир, но с точки зрения логики требования задрачивания кода на скорость выполнения приведут именно к "олимпиадным" задачкам на входе. Зарплат на рынке пока определяют вышеперечисленные, безотносительно мнения об их адкватности в определенных кругах
Научить человека решать реальные рабочие задачи сильно проще, чем дать ему базу по алгоритмам, сисдизу, стройству платформ и и т.п.
STinger : |
Так как это не имеет отношения к решению реальных рабочих задач, в условиях постоянного наличия гугла под рукой. Человек может иметь огромный опыт по решению очень сложных задач, но просто не любит полагаться на свою память. И на таком собесе может забыть какую-нить базовую мелочь, потому что привык всегда в такие моменты залезать в гугл или документацию. А тут нельзя даже IDE заюзать.
|
Это просто любимое Даешь такому человеку реальную рабочую задачу - приложение в проде падет в корку, нужно чинить. А он даже корку в gdb без гугла не может загрузить.
"Базовые мелочи" у профессионала работают рефлекторно, гугл для этого не нужен. И значимая доля таких "мелочей" сейчас автоматично пишется gpt-моделями - в смысле "человек с огромным опытом" для этого уже перестал быть нужен.
_________________ Time will show...
Последний раз редактировалось: Voha (20:22 06-01-2025), всего редактировалось 1 раз |
|
|
Dimaxx
1016 EGP
      Рейтинг канала: 8(898) Репутация: 204 Сообщения: 5811 Откуда: Северодвинск Зарегистрирован: 26.06.2002
 |
|
Voha : |
получить герметичную сборку без динамических библиотек
|
Сборку без доп. либ. В идеале собрать только декодер. Я собрал из сорцов dll декодера, либа вышла маленькая, но что-то в ней не так - одна из подготовительных функций возвращает ошибку. Собрал из тех же сорцов exe - та же картинка нормально декодируется, но она же в либе - ошибка. И я хз где и в чем затык.
Еще не могу победить gcc, чтобы он не резал функции на части - -O1 генерит нормальные функции, а -O2/-O3 две - одну с нормальным именем, а вторую имя.part.номер. А нормальная после нескольких инструкций прыгает в part. Раньше эта фигня контролилась опцией -fdisable-ipa-fnsplit, но она была упразднена.
_________________ "Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс
Последний раз редактировалось: Dimaxx (22:44 06-01-2025), всего редактировалось 1 раз |
|
|
Ritchie
279 EGP
 Рейтинг канала: 1(4) Репутация: 10 Сообщения: 6572
Зарегистрирован: 15.12.2015
 |
|
Dimaxx : |
Раньше эта фигня контролилась опцией -fdisable-ipa-fnsplit, но она была упразднена.
|
Насколько знаю, но раньше у гсс форков, как нерезаных собак. Может в каком и осталась?
|
|
|
Grebomet
1466 EGP
      Рейтинг канала: 8(759) Репутация: 261 Сообщения: 4787 Откуда: Питербурх Зарегистрирован: 06.01.2003
 |
|
Dimaxx : |
Есть либа libwebp. Компилю исходники с помощью msys2+gcc.
|
А почему не чем-нибудь более нативным? Msys2 все-таки пытается из винды линукс сделать посредством кучи подпорок и костылей. Не проще той же студией собрать?
Dimaxx : |
Сама либа собирается на ура, НО! Она тянет за собой libgcc и тут же собираемую libsharpyuv (юзается вроде как энкодером). От libgcc избавился с помощью -static-libgcc, но от второй избавиться не могу - она упорно лезет в зависимости и без нее libwebp.dll не грузится, а тащить кучу говна не хочу (мне и от libwebp нужно только декодирование).
|
Чтобы не приходилось таскать за собой кучу DLL, собирай статически.
Dimaxx : |
Как собрать из объектников либу?
|
make libwebpdecode.a
, например...
Dimaxx : |
Или как избавиться от зависимости libsharpyuv?
|
Никак. Я посмотрел в исходники системы сборки - она из libwebp используется.
Dimaxx : |
Я собрал из сорцов dll декодера, либа вышла маленькая, но что-то в ней не так - одна из подготовительных функций возвращает ошибку. Собрал из тех же сорцов exe - та же картинка нормально декодируется, но она же в либе - ошибка. И я хз где и в чем затык.
|
Так тебе просто бинарь декодера надо собрать или подключить библиотеку к своей программе? Если подключить, то собирай ее статически (точнее, обе две - libwebp.lib и ту вторую), а потом линкуйся с ними. Статическая библиотека - это просто архив с объектниками, линкер из него сам выдерет те файлы, в которых лежат используемые функции.
Dimaxx : |
Еще не могу победить gcc, чтобы он не резал функции на части - -O1 генерит нормальные функции, а -O2/-O3 две - одну с нормальным именем, а вторую имя.part.номер. А нормальная после нескольких инструкций прыгает в part. Раньше эта фигня контролилась опцией -fdisable-ipa-fnsplit, но она была упразднена.
|
Зачем ты это хочешь победить? Это часть оптимизаций.
_________________ Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов. |
|
|
Dimaxx
1016 EGP
      Рейтинг канала: 8(898) Репутация: 204 Сообщения: 5811 Откуда: Северодвинск Зарегистрирован: 26.06.2002
 |
|
Grebomet : |
Чтобы не приходилось таскать за собой кучу DLL, собирай статически.
|
Как?
Grebomet : |
make libwebpdecode.a
|
make: *** No rule to make target 'libwebpdecode.a'. Stop.
Grebomet : |
Так тебе просто бинарь декодера надо собрать
|
Да. И потом использовать с другим приложением.
Grebomet : |
Зачем ты это хочешь победить? Это часть оптимизаций.
|
Мне еще нужен код на асме. Я могу, конечно, соединить обе функции, но это все руками.
_________________ "Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс
Последний раз редактировалось: Dimaxx (11:33 20-01-2025), всего редактировалось 1 раз |
|
|
Grebomet
1466 EGP
      Рейтинг канала: 8(759) Репутация: 261 Сообщения: 4787 Откуда: Питербурх Зарегистрирован: 06.01.2003
 |
|
Ну я собирал через CMake - там это делается через переменную WEBP_LINK_STATIC=On. По идее в конфигуре тоже что-то такое же можно задать. Теоретически - через --disable-shared --enable-static.
Dimaxx : |
make: *** No rule to make target 'libwebpdecode.a'. Stop.
|
Я в последний раз msys лет десять назад трогал палочкой, поэтому не уверен, какие он расширения использует. Попробуй make libwebpdecode.lib.
А вообще она тебе точно нужна? Я собрал под виндой dwebp.exe статически - ему только вот эти библиотеки понадобились:
libexampleutil.lib libimagedec.lib libimageenc.lib libimageioutil.lib libsharpyuv.lib libwebp.lib libwebpdemux.lib
Dimaxx : |
Да. И потом использовать с другим приложением.
|
Ну хошь я тебе его пришлю. 1,6 Мб сам бинарь и к нему еще 9,6 Мб отладочных символов в .pdb-шке.
Dimaxx : |
Мне еще нужен код на асме. Я могу, конечно, соединить обе функции, но это все руками.
|
Охоспаде, а асм-то тебе зачем?
dwebp.rar |
Описание: |
|
Имя файла: |
dwebp.rar |
Размер файла: |
1.54 MB |
Скачано: |
17 раз(а) |
_________________ Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов.
Последний раз редактировалось: Grebomet (15:18 20-01-2025), всего редактировалось 1 раз |
|
|
Dimaxx
1016 EGP
      Рейтинг канала: 8(898) Репутация: 204 Сообщения: 5811 Откуда: Северодвинск Зарегистрирован: 26.06.2002
 |
|
Grebomet : |
Теоретически - через --disable-shared --enable-static
|
Пробовал - не канает, либа не собирается.
Grebomet : |
Ну хошь я тебе его пришлю. Улыбка 1,6 Мб сам бинарь
|
Я хочу сам собрать, готовое в инете валяется, правда 1.4 версия. Ну и плюс 1.6 мега слишком пухло - у меня прога 200кб. Я собрал с вырезанием всего лишнего 120кб либу. Убрал все extern - один черт половина функций лезет в экспорт.
Grebomet : |
Охоспаде, а асм-то тебе зачем?
|
У меня свои тараканы. Я его, кстати, активно использую в критически важных местах.
_________________ "Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс |
|
|
Grebomet
1466 EGP
      Рейтинг канала: 8(759) Репутация: 261 Сообщения: 4787 Откуда: Питербурх Зарегистрирован: 06.01.2003
 |
|
Dimaxx : |
Ну и плюс 1.6 мега слишком пухло - у меня прога 200кб.
|
Я ее с рантаймом статическим собрал, а то бы просила какой-нибудь vcrt432.dll (и не один). Этот рантайм сам килобайт 200 накидывает сразу.
Dimaxx : |
Убрал все extern - один черт половина функций лезет в экспорт.
|
Шо?!
А зачем тебе библиотека, из которой не торчат наружу символы?
_________________ Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов. |
|
|
Dimaxx
1016 EGP
      Рейтинг канала: 8(898) Репутация: 204 Сообщения: 5811 Откуда: Северодвинск Зарегистрирован: 26.06.2002
 |
|
Слегка перелопатил декодер, выкинул все ненужное и собрал либу. Завтра опробую.
Grebomet : |
А зачем тебе библиотека, из которой не торчат наружу символы?
|
Убрал не все, как оказалось. Там мое должно торчать, а не вся подноготная декодера. Вот я и дописал. Теперь торчит только мое написанное. Что и хотел.
_________________ "Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс |
|
|
Dimaxx
1016 EGP
      Рейтинг канала: 8(898) Репутация: 204 Сообщения: 5811 Откуда: Северодвинск Зарегистрирован: 26.06.2002
 |
|
Вдогонку еще вопрос. Как перед конфигурацией/сборкой добавить доп. опции компиляции? Мб ключ какой у configure/make?
_________________ "Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс |
|
|
Grebomet
1466 EGP
      Рейтинг канала: 8(759) Репутация: 261 Сообщения: 4787 Откуда: Питербурх Зарегистрирован: 06.01.2003
 |
|
Dimaxx : |
Мб ключ какой у configure/make?
|
Переменные окружения CFLAGS/CXXFLAGS/LDFLAGS выставить перед сборкой.
Ну и посмотреть на выхлоп ./configure --help
_________________ Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов. |
|
|
Dimaxx
1016 EGP
      Рейтинг канала: 8(898) Репутация: 204 Сообщения: 5811 Откуда: Северодвинск Зарегистрирован: 26.06.2002
 |
|
Опция CFLAGS="список" заменяет предопределенное или дополняет?
_________________ "Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс |
|
|
Voha
942 EGP
          Рейтинг канала: 9(1062) Репутация: 169 Сообщения: 4977 Откуда: Moscow, Russia Зарегистрирован: 15.02.2001
 |
|
Dimaxx : |
Опция CFLAGS="список" заменяет предопределенное или дополняет?
|
Зависит от того, что в мэйк-файле/конфигуре написано. Обычно все (из окружения, из строки запуска и собственно из файла) сгребаются в кучу, но бывают нюансы с порядком сгребания, дефолтами и "угадайками" от конфигуре типа "если установлены X и Y, то я вот еще Z поставлю".
_________________ Time will show... |
|
|
Dimaxx
1016 EGP
      Рейтинг канала: 8(898) Репутация: 204 Сообщения: 5811 Откуда: Северодвинск Зарегистрирован: 26.06.2002
 |
|
Кароче пробовать надо и смотреть результат, а потом заново сконфигурить уже с учетом результата.
_________________ "Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс |
|
|
|
|
|
Железный канал: «Клуб программистов.» |
|