170 похожих чатов

Насколько хорошая практика статически линковать libgcc?

25 ответов

4 просмотра

она все равно тянет кучу всего динамически. так что смысла нет.

Michael-Chambers Автор вопроса
️️ ॐ
она все равно тянет кучу всего динамически. так чт...

А мне остальное не слишком важно, надо на debian buster притащить gcc-9+ из bullseye. Целевая платформа для деплоя тот же buster. gcc-9 притащит с собой уже libgcc-10+. Стандартная библиотека вроде не конфликтует. Вот и думаю, линковать статически или gcc собрать со старой libgcc

Michael Chambers
А мне остальное не слишком важно, надо на debian b...

а если в итоговом бинаре окажется две статически слинкованных libstdc++/libc, можно словить больших проблем

Alexander Karaev
почему?

ldd glibc.a там будет libnss как минимум

Michael-Chambers Автор вопроса
Alexander Karaev
тебе придётся и glibc линковать

а зачем? Старая подходит по зависимостям пакету gcc-9

️️ ॐ
ldd glibc.a там будет libnss как минимум

после статической линковки libstdc++/libc остаются только ld.so и какие-то ещё совершенно базовые либы, аби у которых меняется раз в 30 лет

Alexander Karaev
после статической линковки libstdc++/libc остаются...

оно будет работать только если списки функций и размеры типов совпадают. это + мильен UB

️️ ॐ
ldd glibc.a там будет libnss как минимум

ради эксперимента посмотрел зависимости одной из либ, которую линкую статически с stdc++: linux-gate.so.1 (0xf7f08000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7b27000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7b05000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7a01000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf79e2000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf77f9000) /lib/ld-linux.so.2 (0xf7f0a000) все эти либы не менялись уже много лет, не говоря уже о том, что у тс просто gcc-10 <-> gcc-9

Michael-Chambers Автор вопроса
Alexander Karaev
ради эксперимента посмотрел зависимости одной из л...

Проблема только с libgcc_s... Версии остальных между gcc-8 -> 9 можно не менять вроде как

Alexander Karaev
ради эксперимента посмотрел зависимости одной из л...

ну вот человек хочет юзать разные debian... вот он потом и расскажет) я уже проверял. если у тебя не пустой main() а есть например хотяб сокеты или даже dns то ты увидишь что списочек будет чуть больше.

Michael-Chambers Автор вопроса
️️ ॐ
ну вот человек хочет юзать разные debian... вот он...

libhidapi-hidraw.so.0 => /lib/x86_64-linux-gnu/libhidapi-hidraw.so.0 libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 Тут еще grpc+boost+qt статически влинкованы но список не слишком большой. Или я не так смотрю?

Michael Chambers
libhidapi-hidraw.so.0 => /lib/x86_64-linux-gnu...

а каждая из этих либ никого больше не хочет?)

Michael-Chambers Автор вопроса
️️ ॐ
а каждая из этих либ никого больше не хочет?)

загуглил, но я не вижу её нигде в зависимостях. Эти хотят только друг друга

Michael Chambers
загуглил, но я не вижу её нигде в зависимостях. Эт...

как только у тебя будет чтото типа dns (тыже не по ip собрался голому ходить) то ты получишь libnss. grpc просто транспорт же. короче оно не запустится просто. вот и всё

Michael-Chambers Автор вопроса
️️ ॐ
как только у тебя будет чтото типа dns (тыже не по...

пока по айпи (что-то вроде огромной локалки), а там и bullseye перейдет в релиз и можно перекатываться.

Michael Chambers
пока по айпи (что-то вроде огромной локалки), а та...

проще просто dockerfile завести чтоб собрать бинарь для нужного дистра. без всякого гемора с линковкой

Michael-Chambers Автор вопроса
️️ ॐ
проще просто dockerfile завести чтоб собрать бинар...

я бы завел, вот только мне надо чтобы потом завелось на бастере без докера, напрямую

Michael Chambers
я бы завел, вот только мне надо чтобы потом завело...

докер нужен чтобы скомпилить в контейнере на нужный дистр.. дальше юзай просто файл где надо без докера

️️ ॐ
ну вот человек хочет юзать разные debian... вот он...

там как минимум boost::beast с http клиентом и сервером, думаю это уже показатель

Alexander Karaev
там как минимум boost::beast с http клиентом и сер...

значит ручная ликновка тут ничего кроме проблем не даст

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Вопрос по WIN32: Насколько я понимаю то все функции win32 привязаны к объектам операционной системы. Например консоль, файл, кисть, окна итд. Следовательно функции win32 упра...
Tommy Vercetti
6
Hello, can I install macOS and run flutter on a virtual machine? Is it possible to print for iphone?
Mazones
11
кто-то пользуется компонентами rx ? как их лучше ставить, через OPM? (lazarus)
Iluha Companets
15
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
Дороу! У кого-нибудь есть в загашнике проверенная функция экранирования, аналог re.escape в Python? Из доки: » Escape all the characters in pattern except ASCII letters and n...
Daniil Smolyakov
9
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
Карта сайта